数字の前にエスケープ文字「\」を付けると、ガベージ値が生成されます。例:
$a = \12;
print $a;
このコードは以下の出力を提供します
SCALAR(0x2001ea8)
プログラムを再度実行すると、出力が変わります。
ユーザーがゼロから始まる入力を行ったときにユーザーから値(数値)を取得した場合、8進数として解釈したくありません。ですから、数字がゼロで始まる場合はゼロをエスケープしたかったのです。
[コメントの中で、OPは、ユーザーが入力した数値は、先行ゼロがある場合でも10進数として扱われるようにしたいと説明しました。]
数値リテラル(数値を生成するコード)では、先行ゼロは数値が8進数であることをPerlに通知します。
$ perl -E'say 045'
37
ただし、これは数値化(文字列を数値に変換する)には適用されません。
# "045" is the same as reading 045 from handle or @ARGV.
$ perl -E'say 0+"045"'
45
したがって、特別なことをする必要はありません。ユーザーによる045
入力は、数値として使用する場合、45(37ではない)を意味します。
何らかの理由で先行ゼロを取り除く必要があった場合は、次を使用できます。
$var =~ s/^0+(?!\z)//;
に(?!\z)
なること"0"
はありません""
。
ゴミの値ではありません。参照を出力するときにPerlが出力するものを取得しています。
TYPE(ADDRESS)
期待される機能です。文字列に\が必要な場合は、エスケープする必要があります。
$str = "\\12";
または、TedHoppがコメントで文字列リテラルで指摘したように
$str = '\12';
詳細については、Perlのドキュメントを参照してください。
Perlでは、\
は参照演算子です。&
これはCの(アドレスの)に類似しています