Ruby 什么是触发器运算符?

Ruby 什么是触发器运算符?,ruby,regex,perl,language-agnostic,flip-flop,Ruby,Regex,Perl,Language Agnostic,Flip Flop,我最近听说并阅读过Perl和Ruby中使用正则表达式的触发器,但我无法找到它们的实际工作原理以及常见的用例 有人能用语言不可知论的方式解释这一点吗 现在我了解了它是什么,以及它是如何工作的,我将把问题简单地重新表述为:什么是触发器运算符?Perl中的触发器运算符在左操作数为true时计算为true,并一直计算为true,直到右操作数为true。左操作数和右操作数可以是任何类型的表达式,但最常用于正则表达式 对于正则表达式,它对于查找两个标记之间的所有行非常有用。下面是一个简单的示例,展示了它的工

我最近听说并阅读过Perl和Ruby中使用正则表达式的触发器,但我无法找到它们的实际工作原理以及常见的用例

有人能用语言不可知论的方式解释这一点吗


现在我了解了它是什么,以及它是如何工作的,我将把问题简单地重新表述为:什么是触发器运算符?

Perl中的触发器运算符在左操作数为true时计算为true,并一直计算为true,直到右操作数为true。左操作数和右操作数可以是任何类型的表达式,但最常用于正则表达式

对于正则表达式,它对于查找两个标记之间的所有行非常有用。下面是一个简单的示例,展示了它的工作原理:

use Modern::Perl;

while (<DATA>)
{
    if (/start/ .. /end/)
    {
        say "flip flop true: $_";
    }
    else
    {
        say "flip flop false: $_";
    }
}

__DATA__
foo
bar
start
inside
blah
this is the end
baz
如果不希望第一个和第二个正则表达式匹配同一行,可以使用三点版本:
If(/start/../end/)

注意,应注意不要混淆触发器运算符和范围运算符。在列表上下文中,
有一个完全不同的函数:它返回序列值的列表。e、 g

my @integers = 1 .. 1000; #makes an array of integers from 1 to 1000. 

我对Ruby并不熟悉,但建议它也能起到类似的作用。

这里是@dan1111演示的直接Ruby翻译(说明Ruby从Perl中窃取了比触发器更多的东西):

更地道的ruby:

DATA.each do |line|
  if line =~ /start/ .. line =~ /end/ 
    puts "flip flop true: #{line}"
  else
    puts "flip flop false: #{line}"
  end
end

__END__
foo
bar
start
inside
blah
this is the end
baz

你是说触发器中的regexp吗?是的,这是我真正应该问的:)酷,前几天在查看perl时阅读关于触发器操作符的内容,很高兴知道ruby(我的go to scripting语言)也有它,为什么每个
都被打印出来,而不是触发器字符串?操作符的作用域是什么?看,它什么时候重置为false?显然,它有一个隐藏的布尔变量。
while DATA.gets
  if $_ =~ /start/ .. $_ =~ /end/ 
    puts "flip flop true: #{$_}"
  else
    puts "flip flop false: #{$_}"
  end
end

__END__
foo
bar
start
inside
blah
this is the end
baz
DATA.each do |line|
  if line =~ /start/ .. line =~ /end/ 
    puts "flip flop true: #{line}"
  else
    puts "flip flop false: #{line}"
  end
end

__END__
foo
bar
start
inside
blah
this is the end
baz