Thread Probleme beim Testen von Class::Util (5 answers)
Opened by skirnir at 2008-10-01 12:02

skirnir
 2008-10-01 12:02
#115054 #115054
User since
2006-05-09
29 Artikel
BenutzerIn
[default_avatar]
Hallo,

beim Versuch Class::Util zu installieren schlägt 'make test' folgendermaßen fehl:

Code: (dl )
1
2
3
4
5
6
7
8
9
10
11
12
13
14
t/11_load.................NOK 2/5                                            
# Failed test 'Loading a missing class'
# at t/11_load.t line 13.
# 'Can't use string ("c1::") as a HASH ref while "strict refs" in use at /root/.cpan/build/OOTools-2.21-kx3KPN/blib/lib/Class/Util.pm line 30.
# '
# doesn't match '(?-xism:^Can't locate)'
t/11_load.................NOK 3/5
# Failed test 'Re-loading a loaded class'
# at t/11_load.t line 21.
# Looks like you failed 2 tests of 5.
t/11_load.................dubious
Test returned status 2 (wstat 512, 0x200)
DIED. FAILED tests 2-3
Failed 2/5 tests, 60.00% okay


Die Funktion in Util.pm sieht folgendermaßen aus:

Code (perl): (dl )
1
2
3
4
5
6
7
8
9
10
; sub load
   { local $_ = $_[0] if defined $_[0]
   ; my $r = eval "require $_;"
   ; if ($@)
      { (my $c = $_.'.pm') =~ s|\b::\b|/|g
      ; croak $@ if $@ !~ /^Can't locate $c in \@INC/
                    || not defined %{$_.'::'} # <--- Zeile 30
      }
   ; $r
   }


Das obere ist der von Domizio Demichelis favorisierte Perlish Coding Style, deshalb der Lesbarkeit halber derselbe Auszug nochmal nach einem perltidy Durchlauf:

Code (perl): (dl )
1
2
3
4
5
6
7
8
9
10
11
sub load {
    local $_ = $_[0] if defined $_[0];
    my $r = eval "require $_;";
    if ($@) {
        ( my $c = $_ . '.pm' ) =~ s|\b::\b|/|g;
        croak $@
          if $@ !~ /^Can't locate $c in \@INC/
              || not defined %{ $_ . '::' }; # <--- Zeile 30
    }
    $r;
}


Ich glaube schon, dass ich im Groben verstehe, was die Funktion macht, aber ausgerechnet was mit der Zeile 30 bezweckt wird, ist mir schleierhaft. Kann mir vielleicht jemand einerseits erklären, was die Dereferenzierung in der Zeile bezweckt und hat jemand eine Idee, unter welchen Voraussetzungen ich den Test bestehen kann?

Umgebung ist perl 5.10.0 unter Fedora 9. Ich habe diese Version von Class::Util schon erfolgreich mit perl 5.8.8 und 5.8.5 installiert. Liegt das Problem vielleicht im perldelta?

View full thread Probleme beim Testen von Class::Util