看板 Perl 關於我們 聯絡資訊
$A = "a"; my ($s1,$s2) = do { if ($A eq "a"){ ("s1","s2") } elsif ($A ne "a"){ ("s3","s4") } }; 1. 紅色部份才是「字串」比較唷 2. 黃色部份應該才是你要的邏輯 print "S1=$s1 S2=$s2"; ※ 引述《gecer (gecer)》之銘言: : ※ 引述《gugod (啊)》之銘言: : : 以下是我的猜測... 這裡一整段看起來類似 : : $a = ... ? ... : ... : : 的結構,只不過每一個部份都複雜一些。如果不這麼寫,可能就要重複很多 ($found, $type),變成像這樣: : : my ( $found, $type ); : : if( $line =~ /\G([a-z]+(?:'[ts])?)/igc ) : : { ( $found, $type ) = ( $1, "a word" ) } : : elsif( $line =~ /\G (\n) /xgc ) : : { ( $found, $type ) = ( $1, "newline char" ) } : : elsif( $line =~ /\G (\s+) /xgc ) : : { ( $found, $type ) = ( $1, "whitespace" ) } : : elsif( $line =~ /\G ( [[:punct:]] ) /xgc ) : : { ( $found, $type ) = ( $1, "punctuation char" ) } : : else : : { last; () } : : 所以原作者就用 do {...} 來避免重複。 : : do { ... } 主要的語意是取得 { ... } 部份「最後執行語句之值」,這部份並不一定是「最末一句」,請稍微留意。 : : 參考: http://perldoc.perl.org/functions/do.html (do BLOCK 的部份) : $A="a"; : my ($s1,$s2)=do { : if ($A=="a") : {("s1","s2")} : if ($A!="a") : {("s3","s4")} : }; : print "S1=$s1 S2=$s2"; : 小弟模仿此用法 但是輸出的s1 s2卻為空 請問這裡do是否沒有執行到? -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 111.246.218.55 ※ 文章網址: https://www.ptt.cc/bbs/Perl/M.1520744909.A.7E2.html