2016-11-16 44 views
0

我有這兩個語句在我試圖理解的Perl代碼中。不知道輸出值的原因

our $CSITOOLS=`/x/eng/csitools/netapp_menu/common/csitools.sh`; 
print "${CSITOOLS}\n"; 

輸出:

/x/eng/csitools 

如何${VARIABLE_NAME}工作? (在這種情況下爲{CSITOOLS}

謝謝!

+0

你的包,全球'$ CSITOOLS'(見[我們](http://perldoc.perl.org/functions/our.html))接收'scitools.sh',這下反引號運行的輸出。顯然,輸出是你展示的。從命令行運行它,應該給相同的。順便說一句,你不需要那些'{}','$ VAR_NAME'沒有問題。他們需要在變量名來自其他字符串分開,比如'$ {} VAR_NAME ... _more' – zdim

+0

插值時我的意思是,' 「$ {} VAR_NAME ... _more」'。見[PerlDuck(http://stackoverflow.com/users/5830574/perlduck) – zdim

+0

@zdim感謝您的解釋答案! –

回答

5

perldata

正如一些炮彈,你可以在大括號 圍住變量名從​​以下字母數字歧義它(和下劃線)。

即:

如果你有一個像$foo一個變量,要插即whithin的字符串:

my $string = "This is $foobar"; 

那麼Perl會尋找變量$foobar。要搞清楚自己的變量名 就是你需要寫

my $string = "This is ${foo}bar"; 

這是通向變量的名稱$foo。在您的特定情況下不需要花括號{}因爲"$CSITOOLS\n"已經是明確的。但是,它沒有任何傷害。

+0

'perldata'就是我一直在尋找:) – stevieb

+0

@stevieb我不得不尋找以及:-)有時是'perldata',有時是'perlsyn'。但也許問題是關於反作用,我們都是錯誤的。 – PerlDuck

+2

perldata涉及變量和文字。 perlsyn屬於包括流量控制語句和流量控制語句修飾語的語句。 – ikegami

2

從perldoc.perl.org

通過反引號(重音符)包圍的字符串首先經歷雙引號內插。然後將其解釋爲外部命令,並且該命令的輸出是反引號字符串的值,就像在shell中一樣。

顯然,中csitools.sh結果是字符串/x/eng/csitools

3

Perl的允許您與括號({})環繞一個標量變量的名稱的名稱來自任何周圍的字符分開。假設你有一個變量詞「項目」,並且要在字符串中打印item99,中間沒有空格:

my $name = "item"; 
print "${name}99\n"; 

如果沒有括號,perl的將其解釋變量是這樣的:

print "$name99\n"; 

...這是一個未聲明的,不確定的變量,絕對不是你的意思。啓用warnings,會顯示類似:

Use of uninitialized variable in ... 

如果不打開了警告,該程序可能會沿着歡快地跑和做其他事情,可能/可能打破東西遠了就行了。這使事情很難排除故障。

在你的簡單情況下,不需要使用大括號,而且在打印語句中你不會經常看到它們,除非需要在變量和其他有效變量字符之間沒有空白字符時組合變量在字符串內插入。

相關問題