2014-07-11 56 views
2

鑑於我有以下不正確的代碼:索引通過子程序返回一個列表 - 語法

my $this_is_easier = caller(0)[0]; 

爲什麼要爲我做,以編譯以下?

my $this_is_easier = (caller(0))[0]; 

這只是Perl解析器的一個細微差別嗎?在其他語言如Python和C++中,它假設函數將返回可索引的內容。

+2

更簡單:'我($ this_is_easier)=調用者(0)' – mob

+0

我知道這很容易,但我要求的語法。原來的用法是說來電(0)[0] – edaniels

回答

3

[]遵循另一個索引時,它意味着取消引用。

$foo[...][...] means $foo[...]->[...] 

()遵循另一個索引時,它意味着取消引用。

$foo[...](...) means $foo[...]->(...) 

因此,這是非常合理的,爲人們期待

foo(...)[...] 

意味着

foo(...)->[...] 

而不是

(foo(...))[0] 

在預期的分歧可能是原因它不是supp orted。

+0

但是foo(...)[...] [...]實際上工作嗎?當我運行foo返回一個引用時,它仍然是一個語法錯誤。 – edaniels

+0

呵呵?你爲什麼問它是否有效?你的問題是爲什麼它不起作用,我解釋了爲什麼它不起作用。 – ikegami

+0

抱歉的困惑。我以爲你暗示foo(...)[...]應該被解釋爲foo(...) - > [...]。沒有完全接受你的最後一句話。 – edaniels

相關問題