簡體   English   中英

什么是觸發器操作符?

[英]What is a flip-flop operator?

我最近聽說過有關Perl和Ruby中帶有正則表達式的觸發器,但是我無法找到它們是如何工作的以及常見的用例。

任何人都可以用與語言無關的方式解釋這一點嗎?

現在我明白了它是什么,以及它是如何工作的,我將這個問題簡單地改為:什么是觸發器操作符?

當左操作數為真時,Perl中的觸發器運算符求值為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

對於從startthis is the end所有行,觸發器操作符都是真的。

運算符的雙點版本允許第一個和第二個正則表達式在同一行上匹配。 所以,如果你的數據看起來像這樣,那么上面的程序只適用於行start blah end等待:

foo
bar
start blah end
inside
blah
this is the end
baz

如果您不希望第一個和第二個正則表達式匹配同一行,則可以使用三個點版本: if (/start/ ... /end/)

請注意,應注意不要將觸發器操作符與范圍操作符混淆。 在列表上下文中, ..具有完全不同的功能:它返回順序值列表。 例如

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

我不熟悉Ruby,但Lee Jarvis的鏈接表明它的工作方式類似。

這是@ dan1111演示的直接Ruby翻譯(說明Ruby竊取的內容比Perl的flip_flop更多):

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

暫無
暫無

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

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