나는 다른 플래그로 Perl 코드 나 스크립트를 실행하는 많은 방법을 보았다. 그러나 각 플래그가 의미하는 바에 대해 Google을 검색 할 때 주로 일반 Perl 사이트에 대한 결과를 얻고 플래그 또는 해당 사용에 대한 특정 정보를 찾을 수 없습니다.
다음은 내가 가장 자주 접하는 플래그이며 그 의미를 알지 못합니다.
- 펄 -pe
- 펄 -pi
- 펄 -p
- 펄 -w
- 펄 -d
- 펄 -i
- 펄 -t
그 각각의 의미와 사용 사례를 알려주거나 적어도 그 의미를 찾는 방법을 알려 주시면 매우 감사하겠습니다.
답변
예, Google은 구두점을 찾는 데 악명이 높으며, 안타깝게도 Perl 은 대부분 구두점으로 구성되어 있습니다. 🙂
명령 줄 스위치는 모두 perlrun에 자세히 설명되어 있습니다. (를 호출하여 명령 줄에서 사용 가능 perldoc perlrun
)
옵션을 하나씩 간단히 살펴 보겠습니다.
-p : 명령 주위에 인쇄 루프를 배치하여 각 명령에 대해 작동합니다. 표준 입력 라인. Perl이 이길 수 있도록 주로 사용 힘과 단순성 측면에서 바지를 벗기다 :-) -n : 명령 주위에 인쇄되지 않는 루프를 배치합니다. -e : 프로그램을 인수로 제공 할 수 있습니다. 파일보다. 스크립트를 생성 할 필요가 없습니다. 모든 작은 Perl 한 줄짜리 파일. -i : 입력 파일을 제자리에서 수정합니다 ( 실물). {copy, delete-original, rename} 프로세스. -w : 일부 경고를 활성화합니다. 좋은 Perl 코더라면 이것을 사용합니다. -d : Perl 디버거에서 실행됩니다. Perl 코드를 디버깅하려면 명백하게. -t : 특정 "오염 된"(의심스러운) 코드를 경고 (적절한 이 모호한 코드에서 오염 모드 오류가 발생합니다). 쇠고기에 사용 특히 다른 코드를 실행할 때 Perl 보안을 사용자 (예 : setuid 스크립트 또는 웹 항목)
답변
-p
플래그는 기본적으로 스크립트를 실행
while (<>) {
# exec here
}
continue {
print or die "-p destination: $!\n";
}
-e
스크립트를 전달할 수 있습니다. STDIN
perl -e '$x = "Hello world!\n"; print $x;'
-i
인터프리터에게 STDIN
실행 스크립트 에 의해 전달 된 모든 데이터가 제자리에서 수행되도록 지시합니다 .
-w
과 동일 use warnings;
하지만 로컬 범위가 아닌 전역 범위에 있습니다.
-d
Perl 디버거를 실행합니다.
답변
다른 사람들은 perlrun을 언급했습니다. 당신이 B :: Deparse를 사용하는 경우, 당신은 할 수 있습니다 볼 수 는 (대부분의 것들에 대한) 의미 :
$ perl -MO=Deparse -p -e 1
LINE: while (defined($_ = <ARGV>)) {
'???';
}
continue {
die "-p destination: $!\n" unless print $_;
}
-e syntax OK
1은 최적화되어 있기 때문에 ‘???’로 표시됩니다.
$ perl -MO=Deparse -p -i -e 1
BEGIN { $^I = ""; }
LINE: while (defined($_ = <ARGV>)) {
'???';
}
continue {
die "-p destination: $!\n" unless print $_;
}
-e syntax OK
-i는 $ ^ I를 설정합니다.
$ perl -MO=Deparse -p -i.bak -e 1
BEGIN { $^I = ".bak"; }
LINE: while (defined($_ = <ARGV>)) {
'???';
}
continue {
die "-p destination: $!\n" unless print $_;
}
-e syntax OK
그러나 <ARGV>는 2- 인수 open을 사용하므로로 시작 > <
하거나로 시작 / 종료하는 파일 이름은 사용하지 마십시오 |
.
답변
-n
목록에 언급되지 않은 중요한 플래그 가 하나 있습니다 .
-n
과 동일하게 작동하지만 기본적으로 -p
인쇄되지 않습니다 $_
. 이것은 텍스트 파일 필터링에 매우 유용 할 수 있습니다.
이런 식으로 Perl은 grep | sed
단일 한 줄로 교체 할 수 있습니다 .
예를 들면 :
perl -ne 'print "$1\n" if /Messages read: (\d+)/' <my_input.txt
“Messages read :”이후에 발견 된 모든 정수 값을 출력합니다.