2013-07-01 12 views
13

鑑於此程序:爲什麼perl會將刻度轉化爲冒號?

use strict; 
use warnings; 

my $zx_size = 32; 
my $x = "$zx_size'h0"; 

的Perl告訴我:

Name "zx_size::h0" used only once: possible typo at concat.pl line 7. 
Use of uninitialized value $zx_size::h0 in string at concat.pl line 7. 

爲什麼?

看來有多種方式可以指定var的命名空間。有其他人嗎?

是否可以關閉此行爲?

+0

試試這個「zx_size $ \'H0" (用反斜槓)或「$ zx_size「H0" ; (帶有空格)。基本上你必須分開變量和字符串的內容。 Perl認爲zxsize'h0是變量的名稱。或者,您可以嘗試「$ zx_size」。 「'h0」。祝一切順利。 – Sai

+0

[Perl字符串,一個字符串中的變量,後跟一個單引號和另一個字符做了什麼?]的可能的重複?(http://stackoverflow.com/questions/39360205/perl-string-a-variable-in-a-字符串後接單引號和另一個字符) – Oktalist

回答

19

老包分隔符是原本是用來緩解噸單引號'爲Ada程序員轉換Perl。它被替換爲::以更易讀並且簡化了C++程序員的轉換。

它仍然支持向後兼容性,但是您可以將標量放在{..}中以使其正確插值。

my $x = "${zx_size}'h0"; 

my $x = "$zx_size\'h0"; 
+1

或'my $ x = $ zx_size。 「'h0」;' –

+0

奇怪。答案已於21小時前發佈,但上述評論是在20小時前發佈的? BUG! – Sai

+1

這真的很奇怪。 –

4

閱讀perlmod。第二段。不,沒有辦法關掉它,至少現在是這樣。從理論上講,一個人可以寫一個no feature編譯它,但它已經這樣了20年,而不會造成太多的問題...

11

的單引號字符'使用由早期皮爾斯表示的方法一樣包範圍::,它仍然支持向後兼容性。

做你想做什麼,你都需要使用${}語法告訴Perl的該標識結束,文字開始:

"${zx_size}'h0" 

注意,這是你必須做同樣的事情如果你想跟隨任意其他文字字符是合法的出現在標識符$zx_size值:

"${zx_size}foo" 
相關問題