Thread Vordefinierte Variablen anzeigen
(52 answers)
Opened by bianca at 2010-02-07 13:20
Ah, jetzt kommt was. Aber nur über Webserver, nicht über Kommandozeile. Also schnell alles isoliert, was im Echtscript noch alles geladen wird und festgestellt, dass die abweichenden Umgebungsvariablen aus Archive::Zip kommen:
Code (perl): (dl
)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 #!/usr/bin/perl use strict; use warnings; use 5.10.0; use Archive::Zip qw(:ERROR_CODES :CONSTANTS); for my $var (sort {lc $a cmp lc $b} keys %main::) { my $glob = $main::{$var}; if (ref \$glob ne 'GLOB') { my $ref = ref \$glob; say "$glob: ref=$ref"; say "$var: $glob: ref=$ref"; if (ref \$glob eq "SCALAR") { say $$glob } } } Quote Das heißt, es gibt Umgebungsvariablen die anders aussehen als andere, richtig? Aber wie baue ich das jetzt in den Code ein, damit die Variable genau so gelistet wird wie die anderen? Aus der Zeile my $name = *$glob{NAME}; würde ich my $name = (ref \$glob ne 'GLOB' ? $var : *$glob{NAME}); machen: Code (perl): (dl
)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 #!/usr/bin/perl use strict; use warnings; use 5.10.0; use Archive::Zip qw(:ERROR_CODES :CONSTANTS); use Data::Dumper; for my $var (sort {lc $a cmp lc $b} keys %main::) { my $glob = $main::{$var}; if (ref \$glob ne 'GLOB') { my $ref = ref \$glob; say "$glob: ref=$ref"; say "$var: $glob: ref=$ref"; if (ref \$glob eq "SCALAR") { say $$glob } } my $name = (ref \$glob ne 'GLOB' ? $var : *$glob{NAME}); $name =~ s/([\x00-\x1f\x7f])/'^'.($1^'@')/eg; if ($name !~ /::$/) { do { my $ref = *$glob{SCALAR}; print Data::Dumper->Dump([ $$ref ], [ $name ]) if (defined $$ref); }; } } Dann bleibt immer noch ein Not a GLOB reference at test_perlvars.pl line 20. Was muss ich da unten ändern? 10 print "Hallo"
20 goto 10 |