답변:
당신이하고 싶은 일에 달려 있습니다. 두 개의 인수를 입력 파일로 사용하려면 전달하여 <>
내용을 읽는 데 사용할 수 있습니다.
서로 다른 의미가있는 경우 쉽게 사용 GetOpt::Std
하고 GetOpt::Long
처리 할 수 있습니다. GetOpt::Std
단일 문자 스위치 만 지원하며 GetOpt::Long
훨씬 유연합니다. 보낸 사람 GetOpt::Long
:
use Getopt::Long;
my $data = "file.dat";
my $length = 24;
my $verbose;
$result = GetOptions ("length=i" => \$length, # numeric
"file=s" => \$data, # string
"verbose" => \$verbose); # flag
또는 @ARGV
모든 명령 행 인수를 포함하는 특수 변수입니다. $ARGV[0]
첫 번째 (즉 "string1"
, 귀하의 경우)이며 $ARGV[1]
두 번째 주장입니다. 에 액세스하기 위해 특별한 모듈이 필요하지 않습니다 @ARGV
.
Contains the name of the current file when reading from <> .
생각하는 것처럼 전달하고 스크립트에서 배열에서 가져옵니다 @ARGV
. 이렇게 :
my $numArgs = $#ARGV + 1;
print "thanks, you gave me $numArgs command-line arguments.\n";
foreach my $argnum (0 .. $#ARGV) {
print "$ARGV[$argnum]\n";
}
에서 여기 .
$#ARGV + 1
당신도 말했다 수@ARGV
ARGV[0]
또는 $argv[1]
특정 인수를 찾고 있다면 사용하십시오 .
foreach my $arg (@ARGV) {
print $arg, "\n";
}
각 인수를 인쇄합니다.
또는, 더 섹시한 썩은 방법 .....
my ($src, $dest) = @ARGV;
"가정"두 값이 전달됩니다. 추가 코드는 가정이 안전하다는 것을 확인할 수 있습니다.
@ARGV
당신에게서 어떤 조치없이 ARGV /는 argc를 통해 공급 ++ 단지 C / C와 같은
인수가 읽을 파일 이름 인 경우, 다이아몬드 (<>) 연산자를 사용하여 내용을 가져 오십시오.
while (my $line = <>) {
process_line($line);
}
인수가 옵션 / 스위치 인 경우 slavy13.myopenid.com에 이미 표시된대로 GetOpt :: Std 또는 GetOpt :: Long을 사용하십시오.
그들이 다른 것일 가능성이있는 경우, 명시 적으로 또는 다음 shift
명령을 사용하여 @ARGV를 통해 액세스 할 수 있습니다 .
while (my $arg = shift) {
print "Found argument $arg\n";
}
(이 shift
작업을 수행하면 모든 외부에있는 경우에만 작동합니다 sub
.에서 프로그램에 전달 된 sub
인수가 sub
아닌 전달 된 인수 목록을 검색합니다 .)
my $output_file;
if((scalar (@ARGV) == 2) && ($ARGV[0] eq "-i"))
{
$output_file= chomp($ARGV[1]) ;
}
값을 원한다면 @ARGV 배열을 사용하면됩니다. 그러나 명령 행 옵션 처리를 수행하기 위해 더 강력한 것을 찾고 있다면 Getopt :: Long 을 사용해야합니다 .
./script.pl
하거나 런타임에 많은 일이 일어날 것입니다.