2013-04-08 3 views
0

(아래 참조) 스크립트를 보았지만 "-n"에 대한 추가 정보를 찾을 수 없습니다.스크립트에서 "-n"은 무엇입니까?

my $numeric =0; 
my $input = shift; 
if ($input eq "-n") { 
    $numeric =1; 
    $input = shift; 
} 
my $output = shift; 
open INPUT, $input or die $!; 
open OUTPUT, ">$output" or die $!; 
my @file = <INPUT>; 
if ($numeric) { 
    @file = sort { $a <=> $b } @file; 
} else { 
    @file = sort @file; 
} 
print OUTPUT @file; 

스크립트를 설명하는 텍스트는이 다음 말한다 "우리가 우리 프로그램의 이름 뒤에 명령 줄에서 처음 보는 일이 문자열 -n 경우, 우리는 숫자 정렬을 다하고 있습니다." Google 검색이 대부분의 "영숫자가 아닌"기호를 인식하지 못하는 것 같습니다. "-n" 검색 결과 아무 것도 표시되지 않습니다. 내가 본 "-n" 다른 유일한 곳은 Perl을 배우는 중입니다. 다음은 "sed 변환 된 스크립트는 -n 옵션을 사용하거나 사용하지 않고 작동 할 수 있습니다"라는 말입니다. 이것이 스크립트에서와 같은 "-n"인지 확실하지 않습니다. -n에 대한 자세한 정보를 찾을 수있는 아이디어 (숫자 문자열을 의미 할 수도 있지만 그 밖의 것은 없습니다)

답변

5

이 스크립트에서 사용 된 -nperl에서 사용하는 -n 플래그와 완전히 관련이 없습니다. 즉,이 :

perl -n script.pl 

이 완전히 다른 :

perl script.pl -n 

은 무엇 당신이 가진 것은 두 번째 경우입니다. shift에 대한 설명서를 살펴 보자 :

오프 배열의 첫 번째 값을으로 이동하고 1 일까지 배열을 단축하고 아래로 모든 이동을 돌려줍니다. 배열에 요소가 없으면 정의되지 않은 값을 반환합니다. ARRAY가 생략 된 경우 서브 루틴 및 형식의 어휘 범위 내에서 @ _ 배열을 이동하고 서브 루틴 외부의 @ARGV 배열을 이동하고 또한 STRING, BEGIN {}, INIT {} 등의 eval로 설정된 어휘 범위 범위 내에서 @ARGV 배열을 이동합니다. CHECK {}, UNITCHECK {} 및 END {} 구문. mouthfull하지만 그것이 무엇 말하는

우리가 서브 루틴에없는 것, 그리고 shift 그 자체로 나타나는 경우, @ARGV의 첫 번째 요소를 잡아 것이다. @ARGV은 무엇입니까? 의 모든 그 이상한 변수가 설명되어 있습니다 perlvar에서 살펴 보자 :

배열 @ARGV는 스크립트를위한 명령 줄 인수를 포함합니다. 사람들은 에 대한하지의 스크립트의 인수 것을

참고. 따라서 누군가가 perl script.pl -n으로 스크립트를 실행하면 $ARGV[0]-n 문자열이라고 기대할 수 있습니다.

는 무슨 일이 일어나고 있는지 분명, 지금 당신의 코드를 보면 :

my $input = shift; 
if ($input eq "-n") { 
    $numeric =1; 
    $input = shift; 
} 

그들은 @ARGV의 첫 번째 요소를 잡아 인수없이 서브 루틴 외부 shift를 사용합니다. 값이 -n이면 변수 $numeric이 1로 설정됩니다.이 변수는 스크립트의 동작 방식을 제어합니다. (스크립트는 입력 파일과 출력 파일의 이름을 @ARGV으로 가져옵니다.)

1

이 스크립트 자체의 명령 줄 인수입니다. 사용자가 스크립트의 이름과 "-n"을 차례로 호출하면 스크립트에 동작 방법을 알려줍니다.

+0

여전히 혼란 스럽습니다. 스크립트가 정확히 어떻게 동작해야합니까 ?? 즉 -n과 함께 또는없이 -n, 차이점은 무엇입니까? –

+1

"-n"은 스크립트 작성자가 입력 파일을 영숫자 대신 숫자로 정렬해야 함을 나타 내기 위해 선택한 것입니다. 다른 프로그램에 대한 명령 줄 인수와는 아무런 관련이 없습니다. 저자는 "-i"또는 "--sort_numerically"로 잘 ​​선택되었을 수도 있습니다. – imran

+1

인터넷에서 찾을 수 없습니다. 찾은 코드 주석에 설명되어 있습니다. 파일을 정렬합니다. 스크립트가 "분류기"라고 가정합니다. 그런 다음 명령 줄에 "inforter outfile"을 작성하면 infile의 모든 행을 읽고 사전 순으로 정렬 한 다음 결과를 outfile에 씁니다. 그러나 "sort -n infile outfile"을 작성하면 줄을 읽고 문자열 대신 숫자로 정렬합니다. –

관련 문제