strmatch はシステム変数が初期化されない。
Tera Term Version 4.73 (SVN# 4845) を、Windows XP Professional Version 2002 SP3 で使用しています。 strmatch では、システム変数が初期化されていない様です。 例えば、次のマクロを実行してみると、messagebox の結果は、';' の右側に書いたとおりとなります。
string1 = 'Microsoft Windows XP [Version 5.1.2600]' strmatch string1 '\[(Version (\d+).(\d+).(\d+))\]' messagebox result 'result' ; 22 messagebox matchstr 'matchstr' ; [Version 5.1.2600] messagebox groupmatchstr1 'groupmatchstr1' ; Version 5.1.2600 messagebox groupmatchstr2 'groupmatchstr2' ; 5 messagebox groupmatchstr3 'groupmatchstr3' ; 1 messagebox groupmatchstr4 'groupmatchstr4' ; 2600 string2 = '' strmatch string2 '\[(Version (\d+).(\d+).(\d+))\]' messagebox result 'result' ; 0 messagebox matchstr 'matchstr' ; [Version 5.1.2600] messagebox groupmatchstr1 'groupmatchstr1' ; Version 5.1.2600 messagebox groupmatchstr2 'groupmatchstr2' ; 5 messagebox groupmatchstr3 'groupmatchstr3' ; 1 messagebox groupmatchstr4 'groupmatchstr4' ; 2600
マッチしなかったときはクリアしない実装になっています。マッチしたかどうか result で判定できますが、クリアされないと不都合がありますか?
Perl では同様の動作をします。
#!/usr/bin/perl $str = "Microsoft Windows XP [Version 5.1.2600]"; $str =~ /\[(Version (\d+).(\d+).(\d+))\]/; print "$1\n"; print "$2\n"; print "$3\n"; print "$4\n"; $str = ""; $str =~ /\[(Version (\d+).(\d+).(\d+))\]/; print "$1\n"; print "$2\n"; print "$3\n"; print "$4\n";
とりあえず、ドキュメントには注意事項を書いておきます。
ご確認ありがとうございます。仕様とのことで理解しました。 また、ドキュメントへの注意書き対応助かります。ありがとうございます。 (自分のマクロロジックを見直すことで対応します)
Tera Term Version 4.73 (SVN# 4845) を、Windows XP Professional Version 2002 SP3 で使用しています。 strmatch では、システム変数が初期化されていない様です。 例えば、次のマクロを実行してみると、messagebox の結果は、';' の右側に書いたとおりとなります。