실제로 유용한 작업을 수행하기 위해 실제로 사용할 수 있었지만 Perl에서 실제로 유용하지만 난해한 언어 기능은 무엇입니까?
지침 :
- CPAN이 아닌 Perl 코어에 대한 답변을 제한하십시오.
- 예와 간단한 설명을 입력하십시오
숨겨진 기능은 다른 언어의 숨겨진 기능에서도 찾을 수 있습니다.
(이것들은 모두 Corion의 답변 에서 온 것입니다 )
- 씨
- 더프의 장치
- 휴대 성과 표준 성
- 씨#
- 공백으로 구분 된 목록 및 문자열에 대한 따옴표
- 별칭 네임 스페이스
- 자바
- 정적 이니셜 라이저
- 자바 스크립트
- 기능은 일등 시민입니다
- 블록 범위 및 폐쇄
- 변수를 통해 간접적으로 메소드 및 접근자를 호출
- 루비
- 코드를 통한 메소드 정의
- PHP
- 광범위한 온라인 문서
- 마술 방법
- 상징적 참조
- 파이썬
- 한 줄 값 교환
- 핵심 기능조차도 자신의 기능으로 대체하는 기능
다른 숨겨진 기능 :
연산자 :
- 부추 의사 연산자
- 플립 플롭 연산자
- 리스트 구성 에도 사용
++
및 단항-
연산자는 문자열 작업- 반복 연산자
- 우주선 연산자
- || 일련의 선택 항목 중에서 선택하는 연산자 (및 // 연산자)
- 다이아몬드 연산자
m//
운영자 의 특수 사례- 물결표 “작업자”
인용 구조 :
구문과 이름 :
모듈, Pragma 및 명령 줄 옵션 :
변수:
루프 및 흐름 제어 :
정규식 :
다른 기능들:
- 디버거
- BEGIN, CHECK 및 END와 같은 특수 코드 블록
DATA
블록- 새로운 블록 작업
- 소스 필터
- 신호 후크
- 지도 ( 두 번 )
- 내장 함수 래핑
eof
기능dbmopen
기능- 경고를 오류로 바꾸기
다른 속임수와 메타 답변 :
또한보십시오:
답변
flip-flop 연산자는 플래그 변수를 사용하지 않고 파일 핸들이 반환 한 레코드 (일반적으로 행)를 반복 할 때 첫 번째 반복을 건너 뛰는 데 유용합니다.
while(<$fh>)
{
next if 1..1; # skip first record
...
}
perldoc perlop
자세한 정보와 예제를 보려면 “플립 플롭”을 실행 하고 검색 하십시오 .
답변
Perl에는 많은 명백한 기능이 있습니다.
예를 들어,시길 뒤에 공백이있을 수 있다는 것을 알고 있습니까?
$ perl -wle 'my $x = 3; print $ x'
3
또는 기호 참조를 사용하는 경우 하위 번호를 지정할 수 있습니까?
$ perl -lwe '*4 = sub { print "yes" }; 4->()'
yes
“bool”유사 연산자도 있습니다.이 연산자는 실제 표현식에 대해서는 1을 반환하고 false에 대해서는 빈 문자열을 반환합니다.
$ perl -wle 'print !!4'
1
$ perl -wle 'print !!"0 but true"'
1
$ perl -wle 'print !!0'
(empty line)
다른 흥미로운 것들 : use overload
문자열 리터럴과 숫자를 오버로드 할 수 있습니다 (예 : BigInts 또는 무엇이든 만들 수 있습니다).
이러한 것 중 많은 부분이 실제로 어딘가에 문서화되거나 문서화 된 기능을 논리적으로 따릅니다. 그럼에도 불구하고 일부는 잘 알려져 있지 않습니다.
업데이트 : 또 다른 좋은 것. q{...}
인용 구조 아래 에 언급되었지만 문자를 구분 기호로 사용할 수 있다는 것을 알고 있습니까?
$ perl -Mstrict -wle 'print q bJet another perl hacker.b'
Jet another perl hacker.
마찬가지로 정규 표현식을 작성할 수 있습니다.
m xabcx
# same as m/abc/
답변
magic ARGV 를 통해 압축 파일에 대한 지원 추가 :
s{
^ # make sure to get whole filename
(
[^'] + # at least one non-quote
\. # extension dot
(?: # now either suffix
gz
| Z
)
)
\z # through the end
}{gzcat '$1' |}xs for @ARGV;
(셸 메타 문자가있는 파일 이름을 처리하는 데 필요한 $ _ 주위 인용)
이제이 <>
기능은 @ARGV
“.gz”또는 “.Z”로 끝나는 파일을 압축 해제합니다 .
while (<>) {
print;
}
답변
Perl에서 가장 좋아하는 기능 중 하나는 부울 ||
연산자를 사용하여 선택 세트를 선택하는 것입니다.
$x = $a || $b;
# $x = $a, if $a is true.
# $x = $b, otherwise
이것은 다음과 같이 쓸 수 있음을 의미합니다.
$x = $a || $b || $c || 0;
에서 최초의 진정한 값을합니다 $a
, $b
그리고 $c
, 또는 디폴트의0
그렇지.
Perl 5.10에는 //
정의 된 경우 왼쪽을 반환하고 그렇지 않으면 오른쪽을 반환 하는 연산자 도 있습니다 . 다음 선택하는 제 정의 된 값에서 $a
, $b
, $c
, 또는 0
그렇지
$ x = $ a // $ b // $ c // 0;
또한 짧은 형식과 함께 사용할 수 있으며 기본값을 제공하는 데 매우 유용합니다.
$ x || = 0; # $ x가 false이면 이제 값이 0입니다. $ x // = 0; # $ x가 정의되지 않은 경우 이제 값이 0입니다.
안녕,
폴
답변
++와 단항 연산자는 숫자뿐만 아니라 문자열에서도 작동합니다.
my $_ = "a"
print -$_
인쇄 -a
print ++$_
인쇄 b
$_ = 'z'
print ++$_
인쇄의 AA
답변
펄은 다른리스트에서 거의 모든 “비평”적인 부분을 가지고 있기 때문에 펄이 할 수없는 한 가지를 말씀 드리겠습니다.
Perl이 할 수없는 것은 //
연산자가 정규식에 사용 되기 때문에 코드에 임의의 URL이없는 것입니다 .
Perl이 제공하는 기능이 확실하지 않은 경우를 대비하여 다음과 같은 항목이 명확하지 않을 수 있습니다.
양도 및 Standardness은 – C 컴파일러보다 펄 가능성이 더 컴퓨터가 있습니다
파일 / 경로 조작 클래스 – 파일 :: 닷넷보다 더 많은 운영 체제에서 작품을 찾기
공백으로 구분 된 목록 시세 및 문자열 – 펄은 당신이 당신의 목록 및 문자열 구분 기호 거의 임의의 따옴표를 선택할 수 있습니다
별칭 네임 스페이스-Perl 은 glob 할당을 통해 다음과 같은 기능을 제공합니다.
*My::Namespace:: = \%Your::Namespace
정적 이니셜 라이저 -Perl은 BEGIN
(코드 구문 분석) 에서 (코드 구문 분석 CHECK
후)까지 import
(모듈 가져 오기에서)까지 new
(객체 인스턴스화)에서 DESTROY
(객체 파괴)에서 END
(프로그램 종료) 까지 거의 모든 컴파일 및 객체 인스턴스화 단계에서 코드를 실행할 수 있습니다.
함수는 퍼스트 클래스 시민 -펄처럼
블록 범위 및 클로저 -Perl
변수를 통해 간접적으로 메소드 및 접근자를 호출-Perl 도 다음을 수행합니다.
my $method = 'foo';
my $obj = My::Class->new();
$obj->$method( 'baz' ); # calls $obj->foo( 'baz' )
코드를 통해 방법을 정의 – 펄 그것도 할 수 있습니다 :
*foo = sub { print "Hello world" };
퍼베이시브 온라인 설명서 – 펄 문서도 시스템에 온라인 및 가능성
“존재하지 않는”함수를 호출 할 때마다 호출되는 매직 메소드 -Perl은 AUTOLOAD 함수에서이를 구현합니다.
상징적 참조 -이것들로부터 멀리 떨어져있는 것이 좋습니다. 그들은 당신의 아이들을 먹을 것입니다. 물론 펄은 아이들에게 피에 목 마른 악마를 제공 할 수 있습니다.
한 줄의 값 교환 -Perl은 목록 할당을 허용합니다
use subs 'unlink';
sub unlink { print 'No.' }
또는
BEGIN{
*CORE::GLOBAL::unlink = sub {print 'no'}
};
unlink($_) for @ARGV