List Context erzwingen?

22/01/2008 - 17:14 von Ferry Bolhar | Report spam
Hallo,

bekanntlich kann man mittels der scalar Funktion einen skalaren Kontext
erzwingen:

print @x; # Gibt die Element von @x aus
print scalar @x; # Gibt die Elementanzahl von @x aus

Ich bràuchte jetzt genau das Umgekehrte - das Erzwingen eines
Listenkontexts.

Ich habe eine Anweisung in der Form:

my $val = '/F:' . $option =~ /^Ref: (.+) / . 'DATA';

Ich binde den in der Regex gefundenen Wert an $1 und möchte dieses $1 mit
den beiden Stringliteralen vorher und nachher verknüpfen. Es wird aber nicht
$1 (das, wie sich beim Testen zeigt, den gewünschten Wert enthàlt), sondern
die Ziffer "1" eingesetzt. Klar - im skalaren Kontext (der durch den
Verknüpfungsoperator "." vorgegeben wird) gibt der Match-Operator die Anzahl
an Matches zurück, nicht die Matches selbst.

Klar, dass ich das zweizeilig auch schreiben kann. Aber gibt es eine
Möglichkeit, das wie angedeutet in einer Zeile zu formulieren?

Danke für eure Hilfe & schöne Grüße aus Wien,

Ferry

Ing Ferry Bolhar
Magistrat der Stadt Wien - MA 14
A-1010 Wien
E-Mail: ferdinand.bolhar-nordenkampf@wien.gv.at
 

Lesen sie die antworten

#1 Paul Hink
22/01/2008 - 17:58 | Warnen spam
Ferry Bolhar wrote:

bekanntlich kann man mittels der scalar Funktion einen skalaren
Kontext erzwingen:

print @x; # Gibt die Element von @x aus
print scalar @x; # Gibt die Elementanzahl von @x aus

Ich bràuchte jetzt genau das Umgekehrte - das Erzwingen eines
Listenkontexts.



| There is no equivalent operator to force an expression to be
| interpolated in list context because in practice, this is never
| needed. If you really wanted to do so, however, you could use the
| construction "@{[ (some expression) ]}", but usually a simple "(some
| expression)" suffices.

Quelle: `perldoc -f scalar`

Ich habe eine Anweisung in der Form:

my $val = '/F:' . $option =~ /^Ref: (.+) / . 'DATA';

Ich binde den in der Regex gefundenen Wert an $1 und möchte dieses $1
mit den beiden Stringliteralen vorher und nachher verknüpfen.



my $val = '/F:' . ($option =~ /^Ref: (.+) /)[0] . 'DATA';

Es wird aber nicht $1 (das, wie sich beim Testen zeigt, den
gewünschten Wert enthàlt), sondern die Ziffer "1" eingesetzt. Klar -
im skalaren Kontext (der durch den Verknüpfungsoperator "."
vorgegeben wird) gibt der Match-Operator die Anzahl an Matches
zurück, nicht die Matches selbst.



Laut Dokumentation gibt es True (wie z.B. 1) oder False zurück, nicht
irgendeine Anzahl:

| /PATTERN/cgimosx
| Searches a string for a pattern match, and in scalar
| context returns true if it succeeds, false if it fails.

Quelle: "Regexp Quote-Like Operators", perlop-Manpage

Ähnliche fragen