2010-12-10 4 views
-3

명령 줄 입력으로 Perl 파일을 실행할 때 테이블의 필드를 업데이트해야합니다. 예는 다음 t 이것을 구현하는 펄 script.How의 DB에 전용 어드레스 필드 갱신해야하는 입력 파라미터를 수신하는 경우 --address_onlyPerl에서 간단한 명령 행 옵션을 어떻게 파싱합니까?

perl function_impl.pl --address_only 

들어

.

+3

무엇 지금까지 해봤 니? 어떤 부분이 문제가됩니까? 명령 줄 옵션? DB 업데이트? – DVK

+1

또한 업데이트 값을 어떻게 제공합니까? – DVK

+2

또한 사람들이 당신을 위해 대답 한 두 가지 질문 중 하나를 회상하거나 받아들이지 않았습니다. 그걸 지키면 사람들이 당신의 질문에 열망하지 않을 것입니다. – DVK

답변

-4

스크립트가 제로 받아들이는 경우 또는 하나의 인수 당신은 할 수 있습니다 :

if($#ARGV == 0) {  # one argument passed 
     if($ARGV[0] eq '--address_only') { 
       # --address_only passed 
     } else { 
       # something else passed 
     } 
}elsif($#ARGV == -1) { # no argument passed 

}else{     # more than one arg passed 

} 
+2

'@ ARGV' 수동 구문 분석은 전혀 확장 할 수 없습니다. 옵션 구문 분석을위한 CPAN 모듈 (Getopt :: Std 또는 Getopt :: Long)은 확장 성을 제공하기 위해 항상 사용되어야합니다 (가독성을 염두에 두지 마십시오). – Aye

+1

정말로 인자의 수를 원할 때'$ # ARGV'를 체크해야하는 이유는 무엇입니까? 이것은'@ ARGV'에서 사용 가능하며, 별다른 문제가 없습니다. – Ether

11

Getopt::Long는 명령 줄 매개 변수를 구문 분석하는 펄에서 매우 일반적이고 매우 쉬운 방법입니다.

my %args =(); 
GetOptions (\%args, 'address_only');  # will store true value in $args{address_only} 

if ($args{address_only}) { 
    # Update address 
} 

필요한 경우 해당 부분에 대한 지원을 제공 할 수 있도록 테이블을 업데이트하는 데 사용하는 코드를 알려 주시기 바랍니다.

또한 업데이트 값은 어떻게 제공합니까? 귀하의 예제에서 당신은 명령 줄을 통해 그것을 제공하지 않습니다, 그래서 나는 그것이 하드 코딩 가정합니다? 당신이 명령 줄에 제공하려면 매개 변수 값을 허용하려면 위의 코드를 변경 :

my %args =(); 
GetOptions (\%args, 'address_only=s'); # will store address value in $args{address_only} 
# Usage: function_impl.pl --address_only [email protected] 

을 사소한 예를 들어, 빌드 업데이트 성명의 일부 "SET"할 수 있습니다

관련 문제