Schrift
[thread]8867[/thread]

use strict will nicht so recht mitmachen: kleine Syntaxfrage



<< >> 8 Einträge, 1 Seite
Gast Gast
 2007-03-23 14:32
#75295 #75295
Hallo,

ich stehe irgendwie aufm Schlauch. Folgende Zeilen verursachen
eine Fehlermeldung
"Can't use string ("bb") as a SCALAR ref while "strict refs" in use at versuch.pl line 5.

Wieso akzeptiert das use strict diese Konstruktion nicht?

#!/usr/bin/perl
use strict;
my $a="b";
my $bb;
${"b$a"}="irgendetwas"; # <-- hier klemmts

Im voraus Danke für jeden Rat.
LG, Ralph

PS: Ein Array oder Hash kann ich nicht nehmen.
renee
 2007-03-23 14:37
#75296 #75296
User since
2003-08-04
14371 Artikel
ModeratorIn
[Homepage] [default_avatar]
Weil strict keine solchen Referenzen zulässt. Wenn Du es wirklich so machen musst, dann mach es so:

Code: (dl )
1
2
3
4
5
6
7
#!/usr/bin/perl
use strict;
my $a="b";
my $bb;

no strict 'refs';
${"b$a"}="irgendetwas"; # <-- hier klemmts
OTRS-Erweiterungen (http://feature-addons.de/)
Frankfurt Perlmongers (http://frankfurt.pm/)
--

Unterlagen OTRS-Workshop 2012: http://otrs.perl-services.de/workshop.html
Perl-Entwicklung: http://perl-services.de/
renee
 2007-03-23 14:40
#75297 #75297
User since
2003-08-04
14371 Artikel
ModeratorIn
[Homepage] [default_avatar]
Dazu am besten auch mal die Doku zu CPAN:strict und perlref (Symbolic references) lesen...\n\n

<!--EDIT|renee|1174653855-->
OTRS-Erweiterungen (http://feature-addons.de/)
Frankfurt Perlmongers (http://frankfurt.pm/)
--

Unterlagen OTRS-Workshop 2012: http://otrs.perl-services.de/workshop.html
Perl-Entwicklung: http://perl-services.de/
bloonix
 2007-03-23 16:49
#75298 #75298
User since
2005-12-17
1615 Artikel
HausmeisterIn
[Homepage]
user image
Code: (dl )
1
2
3
4
5
6
7
8
9
#!/usr/bin/perl
use strict;
my $a="b";
my $bb;

{ # start no strict block
  no strict 'refs';
  ${"b$a"}="irgendetwas";
} # end no strict block

eventuell "no strict" noch in einen extra Block schieben, damit der
nachfolgende Code nicht beeinflusst wird.\n\n

<!--EDIT|opi|1174661504-->
What is a good module? That's hard to say.
What is good code? That's also hard to say.
One man's Thing of Beauty is another's man's Evil Hack.
nepos
 2007-03-23 17:49
#75299 #75299
User since
2005-08-17
1420 Artikel
BenutzerIn
[Homepage] [default_avatar]
Oder sowas gleich lassen. Wo liegt der Sinn in zur Laufzeit erzeugten Variablennamen? Für meine Begriffe ist das höchst unsauber programmiert...
RalphFFM
 2007-03-23 19:30
#75300 #75300
User since
2006-11-16
258 Artikel
BenutzerIn
[Homepage] [default_avatar]
Hallo,

@nepos: Die Variablen kommen von einem HTML-Formular, das
hatte ich noch nicht erwähnt. Und da geht m.W. leider nicht
etwas in der Art
<input type="text" name=variable[1] ...>
<input type="text" name=variable[2] ...>
<input type="text" name=variable[3] ...>
usw.

Und um beim Auffangen der Formulardaten Elektronen zu
sparen, dachte ich an eine Schleife, wobei halt die Namen
zur Laufzeit erzeugt werden müßten.

Ich hatte es provisorisch erstmal so gelöst, daß ich auf die
Schleife verzichtete und der Code dadurch halt sehr lange
und langweilig wird. Werd's aber wohl ändern so wie von Opi
und renee vorgeschlagen.

LG,
Ralph (nun wieder registriert)
Linuxer
 2007-03-23 20:04
#75301 #75301
User since
2006-01-27
3875 Artikel
HausmeisterIn

user image
edit:
OK, ich habe was übersehen.
Mich würde daher mal der Grund interessieren, warum kein Hash oder Array eingesetzt werden kann?

alte Antwort:
--8<--

[quote=RalphFFM,23.03.2007, 18:30]Und um beim Auffangen der Formulardaten Elektronen zu
sparen, dachte ich an eine Schleife, wobei halt die Namen
zur Laufzeit erzeugt werden müßten.

Ich hatte es provisorisch erstmal so gelöst, daß ich auf die
Schleife verzichtete und der Code dadurch halt sehr lange
und langweilig wird. Werd's aber wohl ändern so wie von Opi
und renee vorgeschlagen.[/quote]

ich mag was übersehen, aber warum nimmst Du dann keinen Hash, wenn Du Daten unter quasi unbekannten Namen ablegen willst?

Code: (dl )
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
#!/usr/bin/perl
use strict;
use warnings;
use Data::Dumper;


# wo auch immer die Daten fuer @elements herkommen moegen
my @elements = qw( an be echna );
my %werte = ();

for my $elem ( @elements ) {
# pack deine daten in den hash
$werte{$elem . 'ton' } = $elem;
}

print Dumper( \%werte ), $/;


Schon kannst Du mit Deinen dynamischen Namen auf die Daten zugreifen... Wie Du Die KEYs des Hash erzeugst, ist Deiner Fantasie überlassen...\n\n

<!--EDIT|Linuxer|1174676850-->
meine Beiträge: I.d.R. alle Angaben ohne Gewähr und auf Linux abgestimmt!
Die Sprache heisst Perl, nicht PERL. - Bitte Crossposts als solche kenntlich machen!
RalphFFM
 2007-03-24 02:00
#75302 #75302
User since
2006-11-16
258 Artikel
BenutzerIn
[Homepage] [default_avatar]
@Linuxer: Kernpunkt ist die Übergabe der Variablen vom Formular
zum Perl-Skript. Ja, zuerst sah ich keinen Weg um variable
Variablennamen herumzukommen. Zwischenzeitlich ist mir
jetzt beim Lesen aller Antworten ein Licht aufgegangen.

Ich kann nun tatsächlich auf die use-strict-inkompatiblen
Referenzen verzichten, und diese Lösung ist sogar auch noch
eleganter. Und nach einem ersten Test scheint es auch zu
funktionieren.

Puhh. Danke nochmals an alle 4 Helfer.
Habe bei Gelegenheit noch eine andere Frage, aber die gehört
in eine andere Rubrik.
<< >> 8 Einträge, 1 Seite



View all threads created 2007-03-23 14:32.