0

こんにちは、Perl スクリプトを使用していくつかのものを取得しようとしています。

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; 
}

何も印刷されていません。何がうまくいかないのか、誰でも私を助けることができますか?

ありがとう

4

2 に答える 2

1

常に プログラムの開始時に、を使用して最初に使用する時点ですべての変数を宣言する必要がuse strictあります。これは、コードのヘルプを求めている場合に特に当てはまります。この方法では、多くの単純な間違いがすぐに明らかになる可能性があるためです。use warningsmy

splitコードの外観から、代わりに使用する必要があるようです。

このプログラムは、ファイル名の文字列をアンダースコアで分割し、最初と最後の2つのフィールドを抽出します。

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
于 2012-05-27T12:06:55.373 に答える
1

parseFileName() を呼び出すことはありません。おそらくmy ($msgType, $OfaCode, $msgCount) = $parseFileName;あるはずですmy ($msgType, $OfaCode, $msgCount) = parseFileName();

于 2012-05-27T10:56:38.220 に答える