簡體   English   中英

范圍算子;翻轉,但防止翻牌,並立即翻轉

[英]Range operator; flip but prevent flop, and make immediate flip

perl -wle 'print join " ", grep /3/ .. undef(), 1..10'

輸出3 4 5 6 7 8 9 10

Q1 :有沒有比undef更好的方法來阻止翻牌?

Q2 :如何強制范圍運算符的左邊部分為無條件true (即true .. /7/ )?

更新:

perl -wE 'say join " ", grep { ((/7/ .. undef)||1) ==1 } 1..10'

可以用作true .. /7/替換。

  1. 任何非常數折疊為數字的虛假表達都可以。

     perl -wE'say join " ", grep $_==3 .. undef, 1..10' perl -wE'say join " ", grep $_==3 .. do{0}, 1..10' perl -wE'say our $FALSE; say join " ", grep $_==3 .. $FALSE, 1..10' 

    沒有觸發器。

     perl -wE'my $ok; say join " ", grep $ok ||= $_==3, 1..10' 
  2. 如果你想要布爾值相反的東西,使用否定!

     perl -wE'say join " ", grep !($_==8 .. undef), 1..10' 

    沒有觸發器。

     perl -wE'my $done; say join " ", grep !($done ||= $_==8), 1..10' 

    好的,所以我把7改為8 要實際匹配7

     perl -wE'my $last; say join " ", grep { my $x = ($_==7 .. undef); !$x || $x == 1 } 1..10' 

    沒有觸發器。

     perl -wE'my $done; say join " ", grep { my $rv = $done; $done ||= $_==7; !$rv } 1..10' 

Q1

使用*FAIL動詞:

print join " ", grep /3/ .. /(*FAIL)/, 1 .. 10;

哪個可以縮寫為*F

print join " ", grep /3/ .. /(*F)/, 1 .. 10;

對於TIMTOWTDI

print join " ", grep /3/ .. /(?!)/, 1 .. 10;

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM