バグっていたのは、次のようなコードです。
$arch = `uname -m` ; if ($arch == "x86_64") { ...アーキテクチャが x86_64 の場合に、追加の処理を行うという内容なのですが、perl で文字列比較する場合には、正しくは eq を使う必要があり、== と書いてしまうと、数値比較となり、$arch == "x86_64" は常に真になってしまいます。それで、次のように修正しました。
$arch = `uname -m` ; if ($arch eq "x86_64") { ...これでうまく行くと思ったのですが、なぜか真にならず、意図したようには動きませんでした。テストプログラムを書いて格闘した結果・・・
$arch=`uname -m` ; printf "%s\n", $arch ; printf "%d\n", ($arch eq "x86_64") ; printf "%d\n", ($arch eq "x86_64\n") ;実行結果は次のとおりです。
x86_64 0 1$arch の末尾に改行コードがついていたのが原因でした orz 。というわけで、最終的には次のように修正して、意図したとおりに動くようになりました。
$arch = `uname -m` ; chomp($arch) ; if ($arch eq "x86_64") { ...この内容であれば、正規表現を使って $arch =~ /x86_64/ と書いておけば、2度までハマることもなかったのに・・・と思いましたが、最初からバグらないでプログラミングするのは難しいものですね。
0 件のコメント:
コメントを投稿