Merkwuerdiges bei split

Post removed (X-No-Archive: yes)
Notifier Deamon [ Mi, 01 November 2006 16:55 ] [ ID #1521302 ]

Re: Merkwuerdiges bei split

Christoph Biedl wrote:

> | my $h = { 'pattern' => '234' };
> | [at] parts = split (/($h -> {'pattern'})/, $s);

Das funktioniert nicht.

> Alternativ kann ich auch die Leerzeichen bei der Dereferenzierung
> auslassen:
> | [at] parts = split (/($h->{'pattern'})/, $s);

Das funktioniert.

Grüße
Frank
--
Dipl.-Inform. Frank Seitz; http://www.fseitz.de/
Anwendungen für Ihr Internet und Intranet
Tel: 04103/180301; Fax: -02; Industriestr. 31, 22880 Wedel
Frank Seitz [ Mi, 01 November 2006 17:20 ] [ ID #1521303 ]

Re: Merkwuerdiges bei split

On 2006-11-01 15:55, Christoph Biedl <cbiedl [at] gmx.de> wrote:
> Im gegebenen Fall ist das Muster aber tiefer in einer Datenstruktur
> versteckt:
>| my $h = { 'pattern' => '234' };
>| [at] parts = split (/($h -> {'pattern'})/, $s);
> und plötzlich bekomme ich
>| 12345
> ihn nicht nicht gespaltet!
[...]
>
> Alternativ kann ich auch die Leerzeichen bei der Dereferenzierung
> auslassen:
>| [at] parts = split (/($h->{'pattern'})/, $s);
>
> Also gut, ich habe einen Worgaround. Aber was ist da eigentlich passiert?

Ganz normale String-Interpolation, hat nichts mit split zu tun. Bei

my $h = { 'pattern' => '234' };
my $foo = "($h -> {'pattern'})";
print "<$foo>\n";

ist das Ergebnis das gleiche (und da siehst Du auch schön, was
passiert).

> Und wie ist die saubere Lösung (doppelte Klammerung ist es nicht)?

Lass die Leerzeichen um "->" weg. Die tragen nichts zur Lesbarkeit bei
und verwirren den Menschen genauso wie perl. Ich zumindest könnte
»$h -> {'pattern'}« durchaus als »$h => {'pattern'}« lesen, weil das für
mich optisch ähnlicher ausschaut als das gewohnte »$h->{'pattern'}«. Der
-> Operator bindet sehr eng und das sollte man auch optisch zum Ausdruck
bringen.

hp


--
_ | Peter J. Holzer | > Wieso sollte man etwas erfinden was nicht
|_|_) | Sysadmin WSR | > ist?
| | | hjp [at] hjp.at | Was sonst wäre der Sinn des Erfindens?
__/ | http://www.hjp.at/ | -- P. Einstein u. V. Gringmuth in desd
hjp-usenet2 [ Mi, 01 November 2006 20:26 ] [ ID #1521304 ]

Re: Merkwuerdiges bei split

Peter J. Holzer wrote:
> On 2006-11-01 15:55, Christoph Biedl <cbiedl [at] gmx.de> wrote:
>>
>>| [at] parts = split (/($h -> {'pattern'})/, $s);
[...]
> Lass die Leerzeichen um "->" weg. Die tragen nichts zur Lesbarkeit bei
> und verwirren den Menschen genauso wie perl. Ich zumindest könnte
> »$h -> {'pattern'}« durchaus als »$h => {'pattern'}« lesen, weil das für
> mich optisch ähnlicher ausschaut als das gewohnte »$h->{'pattern'}«. Der
> -> Operator bindet sehr eng und das sollte man auch optisch zum Ausdruck
> bringen.

Die Wahlfreiheit besteht in einem String oder Regex ohnehin nicht,
da "$h -> {'pattern'}" dort schlicht falsche Syntax ist.

Grüße
Frank
--
Dipl.-Inform. Frank Seitz; http://www.fseitz.de/
Anwendungen für Ihr Internet und Intranet
Tel: 04103/180301; Fax: -02; Industriestr. 31, 22880 Wedel
Frank Seitz [ Do, 02 November 2006 10:54 ] [ ID #1522563 ]

Re: Merkwuerdiges bei split

On 2006-11-02 09:54, Frank Seitz <devnull4711 [at] web.de> wrote:
> Peter J. Holzer wrote:
>> On 2006-11-01 15:55, Christoph Biedl <cbiedl [at] gmx.de> wrote:
>>>
>>>| [at] parts = split (/($h -> {'pattern'})/, $s);
> [...]
>> Lass die Leerzeichen um "->" weg. Die tragen nichts zur Lesbarkeit bei
>> und verwirren den Menschen genauso wie perl.
[...]
> Die Wahlfreiheit besteht in einem String oder Regex ohnehin nicht,
> da "$h -> {'pattern'}" dort schlicht falsche Syntax ist.

Das hoffte ich eigentlich in der ersten Hälfte der Mail klar gemacht zu
haben.

hp


--
_ | Peter J. Holzer | > Wieso sollte man etwas erfinden was nicht
|_|_) | Sysadmin WSR | > ist?
| | | hjp [at] hjp.at | Was sonst wäre der Sinn des Erfindens?
__/ | http://www.hjp.at/ | -- P. Einstein u. V. Gringmuth in desd
hjp-usenet2 [ Do, 02 November 2006 16:48 ] [ ID #1522564 ]

Re: Merkwuerdiges bei split

Peter J. Holzer wrote:
> On 2006-11-02 09:54, Frank Seitz <devnull4711 [at] web.de> wrote:
>>Peter J. Holzer wrote:
>>>On 2006-11-01 15:55, Christoph Biedl <cbiedl [at] gmx.de> wrote:
>>>
>>>>| [at] parts = split (/($h -> {'pattern'})/, $s);
>>[...]
>>>Lass die Leerzeichen um "->" weg. Die tragen nichts zur Lesbarkeit bei
>>>und verwirren den Menschen genauso wie perl.
> [...]
>>Die Wahlfreiheit besteht in einem String oder Regex ohnehin nicht,
>>da "$h -> {'pattern'}" dort schlicht falsche Syntax ist.
>
> Das hoffte ich eigentlich in der ersten Hälfte der Mail klar gemacht zu
> haben.

s/der Mail/des Posting/;

Nein, nicht so sehr klar (IMO), deswegen meine ergänzende Bemerkung.

Grüße
Frank
--
Dipl.-Inform. Frank Seitz; http://www.fseitz.de/
Anwendungen für Ihr Internet und Intranet
Tel: 04103/180301; Fax: -02; Industriestr. 31, 22880 Wedel
Frank Seitz [ Do, 02 November 2006 17:00 ] [ ID #1522565 ]

Re: Merkwuerdiges bei split

Christoph Biedl wrote:
> Getestet mit Perl 5.8.4 und 5.8.8, mit "use strict;", Aufruf
> mit "perl -w"

Das untige hast Du im Leben nicht 1:1 getestet.

> Das Prinzip ist immer dasselbe: Ich habe einen Text
> | my $s = '12345';
> und ein Muster
> | my $pattern = '345';

Wie hat Deine Testumgebung erraten, dass Du '234' meinst?

> und spalte den Text entlang des Musters:
> | my [at] parts = split (/($pattern)/, $s);
> (Die Klammern um $pattern sind nicht wesentlich.)

Falsch. Die sind wesentlich.

> Zu Kontrolle gebe ich das Ergebnis aus:
> | print join (":", [at] parts), "\n";
> und erwarte
> | 1:234:5

Abgesehen dass das nur gilt, wenn ($pattern eq '234')
hast Du das auch nur den Klammern um das Pattern zu
verdanken.
Weiß jemand, warum das überhaupt (mit Klammern) so
funktioniert?

MP
Michael Perle [ So, 05 November 2006 12:44 ] [ ID #1526350 ]
Perl » de.comp.lang.perl.misc » Merkwuerdiges bei split

Vorheriges Thema: require in zwei geschachtelten for-Schleifen, PerlMagick
Nächstes Thema: SHGetFolderPath von Perl aus?