2012-05-27 2 views
0

안녕하세요, 저는 펄 스크립트를 사용하여 몇 가지를 가져 오려고합니다.펄 정규식이 작동하지 않습니다.

my $fileName = "I_Payment_OK_2"; 
my ($msgType, $OfaCode, $msgCount) = $parseFileName; 

#my $msgType = $parseFileName; 
print $OfaCode; 
print $msgType; 
print $msgCount; 

# parse the values from filename 
sub parseFileName { 
    # parse the message type 
    if($fileName =~ m/^(I|O)/) { 
     $var1 = $1; 
    } 
    # parse the OFAC trace keyword 
    if($fileName =~ m/^[A-Z_][A-Za-z_]([A-Z]+)\w(\d+)$/) { 
     $var2 = $2; 
     $var3 = $3; 
    } 
    # return the message type & OFAC trace 
    return ($var1, $var2, $var3); 
    #return $var1; 
} 

아무것도 인쇄되지 않습니다. 아무도 내가 잘못하고있는 일을 도울 수 있습니까?

감사합니다.

답변

1

당신은 절대로 parseFileName()을 호출하지 않습니다. 아마 my ($msgType, $OfaCode, $msgCount) = $parseFileName; 당신은 항상use strict 및 프로그램의 시작에 use warningsmy를 사용하여 최초 사용 시점에 모든 변수를 선언해야 my ($msgType, $OfaCode, $msgCount) = parseFileName();

+0

덕분에 많이 lanzz을. – avirup

+0

답변에 만족한다면 왼쪽의 회색 체크 박스를 클릭하여 수락해야합니다. – lanzz

+0

코드의 정규 표현식 부분을 살펴볼 수 있습니까? – avirup

1

해야한다. 이 방법은 많은 간단한 실수를 신속하게 나타낼 수 있으므로 특히 코드에 대한 도움을 요청할 때 적용됩니다.

코드 모양에 따라 split을 사용해야합니다.

이 프로그램은 파일 이름 문자열을 밑줄로 분리하고 처음과 마지막 두 필드를 추출합니다.

use strict; 
use warnings; 

my $fileName = "I_Payment_OK_2"; 

my ($msgType, $OfaCode, $msgCount) = (split /_/, $fileName)[0, -2, -1]; 

print $msgType, "\n"; 
print $OfaCode, "\n"; 
print $msgCount, "\n"; 

출력

I 
OK 
2 
+0

감사의 말씀 Borodin에게 감사드립니다. – avirup

관련 문제