Mustervergleich in Unterprogramm auslagern

14/07/2009 - 17:38 von ram | Report spam
Ein Perl-5-Skript enthalte etwas wie:

while( $text =~ /pattern/mgi ){ ... pos( $text ) ... }

. Nun soll der Vergleich in ein Unterprogramm ausgelagert werden:

sub match($){ $_[ 0 ] !~ /pattern/mgi; }

, und die Schleife wird dann:

while( match( $text )){ ... pos( $text ) ... }

. Aber dann verweigert der pos-Operator seine Arbeit,
wenn ich mein Testskript richtig verstehe.
Vermutlich »wirkt« das »g« nicht über Unterprogrammgrenzen.

Gibt es eine Möglichkeit, diesen Vergleich doch noch in
wenigstens àhnlicher Weise zu der oben gezeigten Weise in
ein Unterprogramm auszulagern?
 

Lesen sie die antworten

#1 Wolf Behrenhoff
14/07/2009 - 19:04 | Warnen spam
Stefan Ram wrote:
Ein Perl-5-Skript enthalte etwas wie:

while( $text =~ /pattern/mgi ){ ... pos( $text ) ... }

. Nun soll der Vergleich in ein Unterprogramm ausgelagert werden:

sub match($){ $_[ 0 ] !~ /pattern/mgi; }

, und die Schleife wird dann:

while( match( $text )){ ... pos( $text ) ... }

. Aber dann verweigert der pos-Operator seine Arbeit,
wenn ich mein Testskript richtig verstehe.
Vermutlich »wirkt« das »g« nicht über Unterprogrammgrenzen.



Hallo Stefan,

ich hatte pos zwar bis heute noch nie benutzt, aber deine Annahme
scheint falsch zu sein. Hier ein Beispiel-Einzeiler:

perl -we 'sub xxx{$_[0] !~ /o/g} $y="hallo"; xxx($y); print pos $y'

Jedenfalls gibt dieses Programm eine Zahl aus.

- Wolf

Ähnliche fragen