-1

数字の前にエスケープ文字「\」を付けると、ガベージ値が生成されます。例:

$a = \12;
print $a;

このコードは以下の出力を提供します

SCALAR(0x2001ea8)

プログラムを再度実行すると、出力が変わります。

ユーザーがゼロから始まる入力を行ったときにユーザーから値(数値)を取得した場合、8進数として解釈したくありません。ですから、数字がゼロで始まる場合はゼロをエスケープしたかったのです。

4

3 に答える 3

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"はありません""

于 2012-09-25T20:04:04.367 に答える
4

ゴミの値ではありません。参照を出力するときにPerlが出力するものを取得しています。

TYPE(ADDRESS)

期待される機能です。文字列に\が必要な場合は、エスケープする必要があります。

$str = "\\12";

または、TedHoppがコメントで文字列リテラルで指摘したように

$str = '\12';

詳細については、Perlのドキュメントを参照してください。

于 2012-09-25T19:58:34.277 に答える
3

Perlでは、\は参照演算子です。&これはCの(アドレスの)に類似しています

于 2012-09-25T19:57:14.153 に答える