IT story

Perl 프로그램에 명령 행 인수를 전달하려면 어떻게해야합니까?

hot-time 2020. 6. 25. 07:49
반응형

Perl 프로그램에 명령 행 인수를 전달하려면 어떻게해야합니까?


Perl 스크립트를 작성 중입니다. 명령 행 매개 변수를 어떻게 전달할 수 있습니까?

예:

script.pl "string1" "string2"

당신이하고 싶은 일에 달려 있습니다. 두 개의 인수를 입력 파일로 사용하려면 전달하여 <>내용을 읽는 데 사용할 수 있습니다.

서로 다른 의미가있는 경우 쉽게 사용 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.


생각하는 것처럼 전달하고 스크립트에서 배열에서 가져옵니다 @ARGV. 이렇게 :

my $numArgs = $#ARGV + 1;
print "thanks, you gave me $numArgs command-line arguments.\n";

foreach my $argnum (0 .. $#ARGV) {

   print "$ARGV[$argnum]\n";

}

에서 여기 .


foreach my $arg (@ARGV) {
    print $arg, "\n";
}

각 인수를 인쇄합니다.


또는, 더 섹시한 썩은 방법 .....

my ($src, $dest) = @ARGV;

"가정"두 값이 전달됩니다. 추가 코드는 가정이 안전하다는 것을 확인할 수 있습니다.


또 다른 옵션은 다음과 같이 perl -s를 사용하는 것입니다.

#!/usr/bin/perl -s

print "value of -x: $x\n";
print "value of -name: $name\n";

그런 다음 다음과 같이 호출하십시오.

% ./myprog -x -name=Jeff
value of -x: 1
value of -name: Jeff

또는 자세한 내용 은 원본 기사 를 참조하십시오.


변수 @ARGV목록에 특수 변수 지정하여 직접 액세스 할 수 있습니다 . 예를 들어,

( $st, $prod, $ar, $file, $chart, $e, $max, $flag ,$id) = @ARGV;

perl tmp.pl 12 34 5

여기에 이미지 설명을 입력하십시오


인수가 읽을 파일 이름 인 경우, 다이아몬드 (<>) 연산자를 사용하여 내용을 확인하십시오.

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 을 사용해야합니다 .

참고 URL : https://stackoverflow.com/questions/361752/how-can-i-pass-command-line-arguments-to-a-perl-program

반응형