私はPerlが初めてで、正規表現を行う必要があります。配列が整数値のように使用されると、内部の要素の数が得られます。
だから私は例えばやっています
if (@result = $pattern =~ /(\d)\.(\d)/) {....}
パターンマッチングが失敗した場合、空の配列を返す必要があると考えていましたが、2つの要素を持つ配列が得られますが、値は初期化されていません。
では、if条件の中にパターンマッチングを入れる方法はありますか?
編集:
foreach (keys @ARGV) {
if (my @result = $ARGV[$_] =~ /^--(?:(help|br)|(?:(input|output|format)=(.+)))$/) {
if (defined $params{$result[0]}) {
print STDERR "Cmd option error\n";
}
$params{$result[0]} = (defined $result[1] ? $result[1] : 1);
}
else {
print STDERR "Cmd option error\n";
exit ERROR_CMD;
}
}
これはコマンド ライン オプションの正規表現パターンです。cmd オプションは、前に 2 つのハイフンが付いた長い形式であり、引数を使用できるため、--CMD[=ARG] です。私はエレガントなソリューションが欲しいので、プロローグなどのないif条件に入れたいのです.
EDIT2:ああ、私は@result配列のグループは常に0から数えられると思っていましたが、アクセスできるのはパターンが成功しているブランチからのグループだけです。したがって、私のコード コマンドが「入力」の場合、それは $result[0] にあるはずですが、実際には $result[1] にあります。$result[0] が初期化されていない場合、パターンが失敗し、if ステートメントに進むと思いました。