[Cologne-pm] $${VariablenName} funktioniert nicht immer

Robert Meiser Robert.Meiser at rrz.uni-koeln.de
Thu Jun 12 04:32:57 CDT 2003


Das Rätsel ist gelöst. Es war nicht das strict (das ich gar nicht
verwendet habe) sondern das my. Wie im Kapitel über symbolische Referenzen
zu lesen ist, kann perl keine symbolischen Referenzen auflösen wenn der
Variablenname vorher mit my als privat deklariert wurde.
Nach der Deklaration mittels local gings dann.


On Thu, 12 Jun 2003, Robert Meiser wrote:

> Danke für den Hinweis "Fortgeschritten", hab mich dadurch an mein Buch
> "Fortgeschrittene Perl-Programmierung" erinnert, das mir beim Kauf noch
> ein Buch mit 7 Siegeln war. Scheint der Zeitpunkt zu sein reinzuschauen.
> Wusste nicht dass $$Name eigentlich zum dereferenzieren gedacht ist.
>
> On Wed, 11 Jun 2003, Michael Lamertz wrote:
>
> > Muss jetzt zum Treffen, deshalb nur kurz...
> >
> > On Wed, Jun 11, 2003 at 04:40:53PM +0200, Robert Meiser wrote:
> > > Hallo Perlfreunde,
> > > Ich möchte gerne mit dynamischen Variablen-Namen arbeiten, d.h. mit der
> > > Konstruktion '$$Variable', wobei $Variable in einer foreach-Schleife
> > > ständig neue Werte bekommt und somit $$Variable sich in jedem
> > > Schleifendurchlauf auf eine andere Variable bezieht.
> >
> > Vorsicht.  Einsatz von Soft-Refs ist 'was fuer Fortgeschrittene.  Evtl.
> > bist Du mit einem Hash besser 'dran.
> >
> > Unter 'use strict' funktionieren Soft-Refs ohnehin nicht, es sei denn,
> > Du unterbindest das gezielt mit "no strict 'refs';".  Sowas wuerde ich
> > dann in geschweiften Klammern direkt um den betreffenden Code setzen:
> >
> >     {
> >         no strict 'refs';
> >         $$softref = 42;
> >     }
> >
> > > Funktioniert eigentlich auch, zumindest in Scripts ohne CGI auf dem
> > > lokalen Rechner. Aber sobald ich das in ein CGI-Script einbaue eben
> > > nicht mehr.
> > >
> > > Hier ein kleiner Scriptauszug:
> > >
> > > -- SCHNIPP
> > > $NachnameSuchstring=$query->param(Nachname);
> > >
> > > #Test1
> > >       $Suchstring='NachnameSuchstring';
> > >       $NachnameSuchstring='.*teste.*';
> > >       print STDERR qq{Wert Suchstring: $$Suchstring \n};
> > >
> > > #Test2
> > >       $Suchstring='SuchstringNachname';
> > >       $SuchstringNachname='.*teste.*';
> > >       print STDERR qq{Wert Suchstring: $$Suchstring \n};
> > >
> > > -- SCHNIPP
> > > Ergebnis:
> > > Test1 gibt für $$Suchstring den Leerstring aus
> > > Test2 gibt für $$Suchstring den erwünschten Wert .*teste.* aus
> >
> > Mit genau diesem Code bei mir nicht.  Das Problem bei Softrefs und
> > abgeschalteten Warnings ohne 'strict' ist, dass Du keine Fehlermeldung
> > bekommst wenn die Softref wg. Tippfehler in die Wueste zeigt.
> >
> > Komm doch zum Treffen, dann schauen wir nochmal 'drueber...
>
> Danke für das Angebot, kann aber leider nicht kommen. Vielleicht beim
> nächsten mal.
>
> Gruss
> Robert
>
> _______________________________________________
> Cologne-pm mailing list
> Cologne-pm at mail.pm.org
> http://mail.pm.org/mailman/listinfo/cologne-pm
>




More information about the Cologne-pm mailing list