简体   繁体   English

范围算子;翻转,但防止翻牌,并立即翻转

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

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

outputs 3 4 5 6 7 8 9 10 输出3 4 5 6 7 8 9 10

Q1 : Is there better way than undef to prevent flop? Q1 :有没有比undef更好的方法来阻止翻牌?

Q2 : How to force left part of range operator to unconditional true (ie. true .. /7/ )? Q2 :如何强制范围运算符的左边部分为无条件true (即true .. /7/ )?

UPDATE: 更新:

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

could be used as true .. /7/ replacement. 可以用作true .. /7/替换。

  1. Any false expression that isn't constant-folded to a number will do. 任何非常数折叠为数字的虚假表达都可以。

     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' 

    Without a flip-flop. 没有触发器。

     perl -wE'my $ok; say join " ", grep $ok ||= $_==3, 1..10' 
  2. If you want the boolean opposite of something, use negation! 如果你想要布尔值相反的东西,使用否定!

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

    Without a flip-flop. 没有触发器。

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

    Ok, so I changed 7 to 8 . 好的,所以我把7改为8 To actually match on 7 , 要实际匹配7

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

    Without a flip-flop. 没有触发器。

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

Q1 Q1

Use the *FAIL verb: 使用*FAIL动词:

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

Which can be abbreviated to just *F : 哪个可以缩写为*F

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

And for the TIMTOWTDI : 对于TIMTOWTDI

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

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM