回答
見perlop。
一元「\」創建一個引用 後面的任何內容。請參閱perlreftut 和perlref。不要將此 行爲與 反斜槓行爲混淆在一個字符串中,儘管 兩種形式都確實傳達了保護 插值的下一件事的概念。
它在右側創建對變量的引用;有點像C中的指針(沒有指針算術)或Java中的指針。
有關該主題的更多信息,請參閱perldoc perlref。
Dereferentiation通過$$a
做了標量,@$a
爲陣列等
Perl文檔是偉大的,徹底的,及早並經常使用它。我可以推薦perldoc perlreftut
,perl參考教程或perldoc perlref
瞭解更多信息。然後perldoc perlintro
和perldoc perltoc
或perldoc perl
看到哪裏去。
是的,它創建了變量$ a的引用並將其存儲在變量$ ra中。
正如我在其他地方以前寫的...
一元\
創建到任何遵循它的參考。用在列表上,它創建一個引用列表。
不要把這種行爲與字符串中反斜槓的行爲混爲一談,儘管這兩種形式確實傳達了保護下一件事情與解釋有關的模糊的否定概念。這種相似並不完全是偶然的。
您可以使用反斜槓創建對任何指定變量或子例程的引用。您也可以將其用於匿名標量值,如7
或"camel"
,但您通常不需要。至少乍一看,該操作員的工作方式類似於C或C++中的&
(地址)操作員。
下面是一些例子:
$scalarref = \$foo;
$constref = \186_282.42;
$arrayref = \@ARGV;
$hashref = \%ENV;
$coderef = \&handler;
$globref = \*STDOUT;
反斜槓操作者可以做的比產生一個單一的參考。如果應用於列表,它將生成一個完整的參考列表。
如前所述,反斜槓運算符通常用於單個對象以生成單個引用,但它不一定是。當在指示對象列表上使用時,它會產生一個對應參考列表。以下示例的第二行與第一行做同樣的事情,因爲反斜槓自動分佈在整個列表中。
@reflist = (\$s, \@a, \%h, \&f); # List of four references
@reflist = \($s, @a %h, &f); # Same thing
如果一個圓括弧列表包含恰好一個陣列或散列,那麼其所有值進行內插,並給每個引用返回:
@reflist = \(@x); # Interpolate array, then get refs
@reflist = map { \$_ } @x; # Same thing
這也時有內部括號發生:
@reflist = \(@x, (@y)); # But only single aggregates expand
@reflist = (\@x, map { \$_ } @y); # Same thing
如果您使用散列嘗試此操作,則結果將包含對值的引用(如您所期望的),但引用副本的鍵(如你可能不是預計)。
由於數組和哈希切片實際上只是列表,因此您可以反斜線切片以獲取參考列表。接下來的每一個四行的不完全一樣的東西:
@envrefs = \@ENV{"HOME", "TERM"}; # Backslashing a slice
@envrefs = \@ENV{ qw<HOME TERM> }; # Backslashing a slice
@envrefs = \($ENV{HOME}, $ENV{TERM}); # Backslashing a list
@envrefs = (\$ENV{HOME}, \$ENV{TERM}); # A list of two references
因爲函數可以返回列表,你可以申請一個反斜槓給他們。如果你有一個以上的函數來調用,第一插值每個函數的返回值放入一個更大的列表,然後反斜線整個事情:
@reflist = \fx();
@reflist = map { \$_ } fx(); # Same thing
@reflist = \(fx(), fy(), fz());
@reflist = (\fx(), \fy(), \fz()); # Same thing
@reflist = map { \$_ } fx(), fy(), fz(); # Same thing
反斜線操作者總是提供了一個列表環境的操作,所以這些功能所有在列表上下文中調用。如果反斜槓本身是在標量上下文,你會通過函數返回列表的最後一個值的參考結束:
@reflist = \localtime(); # Ref to each of nine time elements
$lastref = \localtime(); # Ref to whether it’s daylight savings time
在這一點上,反斜線行爲類似於Perl的命名列表 運營商,例如print
,reverse
和sort
,其總是 在其右側提供列表上下文,而不管左側可能發生什麼。至於命名列表操作,使用一個明確的scalar
迫使接下來到標量上下文:
$dateref = \scalar localtime(); # \"Sat Nov 13 10:41:30 2010"
現在你知道...這個故事的其餘。
(與道歉已故的保羅·哈維)
我剛剛使用了DATA和\\ * DATA的引用來使用帶LaTeX的Template :: Toolkit。我把LaTeX部分放在DATA部分,然後用'process'中的模板引用:Perl非常酷。 – 2010-11-13 17:27:07
同樣感謝你們展示\\(...)分發,爲每個元素創建一個ref。我會猜想這會列出這個列表的數組,但現在這是有道理的,否則我們需要什麼。謝謝 – 2010-11-13 17:31:25
這是非常全面的,這是tchrist。 – Roy 2010-11-13 17:31:53
- 1. 在Perl中,「$$ q」是什麼意思?
- 2. 在Perl中,=〜/^0 $/mean是什麼意思?
- 3. Perl中的(-s $ filename)是什麼意思?
- 4. Perl中的「~~」是什麼意思?
- 5. Perl中的{$ histogram {$ value} ++}是什麼意思?
- 6. 是什麼意思,當我在Perl
- 7. 是什麼意思:是什麼意思?
- 8. 是什麼意思,在Python中是什麼意思?
- 9. 的Perl:什麼意思=〜
- 10. 這個Perl語句是什麼意思?
- 11. 這是什麼意思!$ var PERL?
- 12. 這段Perl代碼是什麼意思?
- 13. 這些Perl變量是什麼意思?
- 14. 什麼意思:在x86中是什麼意思?
- 15. 什麼?在C#中是什麼意思?
- 16. 「1」是什麼在Perl中的意思是?
- 17. 這些Tk :: Perl中的Perl/Tk錯誤是什麼意思?
- 18. %{}是什麼意思?
- 19. '#'是什麼意思?
- 20. 「?」是什麼意思?
- 21. #{...}是什麼意思?
- 22. || =是什麼意思?
- 23. @是什麼意思
- 24. $$ $$是什麼意思?
- 25. `/ * @`是什麼意思?
- 26. 「=」是什麼意思
- 27. + =是什麼意思?
- 28. {..} [..]是什麼意思?
- 29. 什麼是:!:意思?
- 30. @ []是什麼意思?
如果你正在學習一下吧,有什麼事您的書籍和手冊說? – Ether 2010-11-13 16:39:59
我的講稿沒有詳細說明它是什麼意思,導致我在谷歌搜索。沒有找到滿意的答案,所以我在這裏問了。 – Roy 2010-11-13 16:46:48
@羅伊:確保你選擇了正確的答案。 ☹ – tchrist 2010-11-13 16:59:50