2016-07-03 51 views
2

在下面的代碼中,last在while循環中做了什麼?我得知,如果$matrix[$i][$j]{pointer}變量等於"none"它調用last但它有什麼作用?「last」在Perl中做什麼?

此外,爲什麼$ matrix變量包含使用大括號的分數和指針? {score},我把它作爲數組中的第三個維度讀取,但是這是其他的嗎?在google上找不到關於此的任何內容。謝謝!爲last命令

my @matrix; 
$matrix[0][0]{score} = 0; 
$matrix[0][0]{pointer} = "none"; 
#populate $matrix with more stuff 

while (1) { 
    last if $matrix[$i][$j]{pointer} eq "none"; #<-what is this "last" doing? 
    #do some more stuff here 
} 
+3

這不是Python。我認爲這是Perl。 – GingerPlusPlus

+0

爲什麼我的谷歌搜索無法正常工作。 – joshweir

回答

8

可用用途:

  • 最後一個標籤

  • 最後EXPR

  • 最後

根據Perl的documentation

last的命令是類似於C的break語句(如在 循環使用);它立即退出正在討論的循環。如果省略LABEL爲 ,則該命令引用最內部的封閉循環。最後的 EXPR表格(可從Perl 5.18.0開始獲得)允許在運行時計算標籤名稱 ,否則其與上一個LABEL相同。 continue塊,如果有的話,不執行:

LINE: while (<STDIN>) { 
     last LINE if /^$/; # exit when done with header 
     #... 
    } 

最後不能用於退出返回一個值,如EVAL {},子{}塊,或者做{} ,並且不應該用於退出grep或映射 操作。請注意,塊本身在語義上與執行一次的 循環相同。因此,最後一個可用於在這種塊之外提前退出 。

1

正如你已經得到了關於last的答案,我將解答你的問題的第二部分。 Perl有數組和散列表(也稱爲字典)。頂層的@matrix是一個數組,但是它被另一個數組初始化,並且第二個數組中的元素正在使用哈希表進行初始化。

如果您使用的數據::自卸車到打印出來,或者導出它作爲JSON你會看到類似這樣的:

@matrix= [ 
    [ 
    { score => 0, 
     pointer => 'none' 
    } 
    ] 
] ; 
4

你有一個答案,約last但我想我會分享這個圖像示出nextlastredo如何影響在Perl邏輯流程循環:

enter image description here

continue塊可以任選地加入叔循環定義一些將在每次循環中運行的語句,然後循環回頂部以重新評估循環條件。如果沒有continue塊,next將直接返回到循環條件。