Thread Debugging Hilfe bei Can't use string ("1") as a subroutine ref while "strict refs" in use (8 answers)
Opened by bianca at 2020-12-16 11:25

bianca
 2020-12-16 11:31
#192994 #192994
User since
2009-09-13
7016 Artikel
BenutzerIn

user image
Habe schon was gefunden:

test_require1.pl:
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
25
26
27
28
29
30
31
32
33
34
35
#!/usr/bin/perl
use strict;
use warnings;
use Data::Dumper;
local $Data::Dumper::Purity;
$Data::Dumper::Purity = 1;
local $Data::Dumper::Useqq;
$Data::Dumper::Useqq = 1;
local $Data::Dumper::Deparse = 1;
$Data::Dumper::Deparse = 1;
local $Data::Dumper::Sortkeys;
$Data::Dumper::Sortkeys = sub {
    my ($hash) = @_;
    return [(sort {lc $a cmp lc $b} keys %$hash)]; 
};
use 5.010;

system 'cls';

require "./test_require3.pl";
 
my @dispatch = (
    {
        moduldatei      => "./test_require2.pl",
        aufruf_sub      => \&subname,
    },
);

my %varenv = (test1 => 'start');

my $href = $dispatch[0];
require $href->{moduldatei};
$href->{aufruf_sub}(\%varenv);

say Dumper(\%varenv);


test_require2.pl: wie oben

test_require3.pl:
Code (perl): (dl )
1
2
3
4
5
6
7
8
9
10
11
12
#!/usr/bin/perl
use strict;
use warnings; no warnings 'void';

print "3 wird geladen: ".join(' ~ ',caller)."\n";

sub {
    my ($varenv) = @_;

    $varenv->{test3} = 'hier bin ich!';
    $varenv->{zeiger_geladen} = defined;
}


Damit bekomme ich den Fehler.
Frage: warum wirft das test_require2.pl einen Fehler? Das dürfte doch aufgrund von !defined $varenv->{zeiger_geladen} gar nicht zum require kommen!?

Editiert von bianca: Hinweis zu Code 2 ergänzt
Last edited: 2020-12-16 11:32:47 +0100 (CET)
10 print "Hallo"
20 goto 10

View full thread Debugging Hilfe bei Can't use string ("1") as a subroutine ref while "strict refs" in use