2011-07-26 15 views
1

Perlと私は、変数が数値かどうかに関して意見が異なります。私は間違っている、もちろん、なぜですか?Perl数値変数

my $bytes = 0; 
# . . . 
$bytes = $bytes + length($text); 
# . . . 
my $MB = $bytes/1048576; 
my $string = sprintf("Downloaded: %.1f MB\n", MB); 

は、Argument "MB" isn't numeric in sprintf at foo.pl line 200.となります。

私はDownloaded: 3.09680080413818 MBに文字列を設定します

my $string = "Downloaded: $MB MB\n"; 

を使用するときには、実際には、などの数値を見ることができています。

編集:ああ、愚かな間違い、それをキャッチするためにありがとう。

+4

@Woobleが指摘しているように、将来は 'use strict;'でこれらのいくつかを捕まえることができます( 'warnings 'を使うべきです)。 –

+0

@Platinum Azure:もちろん。私はいつもそれらを使用することを_intend_ ...ヘッドアップのおかげで。 – Charles

答えて

10

あなたは、変数のシギルが必要になります。これは動作するはずですそれ以外の

my $string = sprintf("Downloaded: %.1f MB\n", $MB); 

を:あなたはおそらく意味のよう

my $bytes = 0; 
# . . . 
$bytes = $bytes + length($text); 
# . . . 
my $MB = $bytes/1048576; 
my $string = sprintf("Downloaded: %.1f MB\n", $MB); # <--- note the $MB at the end 
+10

これは、常に 'use strict;'を使うべきである理由です。 – geoffspear