Thread Perl bug in 5.10.0 (4 answers)
Opened by sid burn at 2009-06-15 12:03

pq
 2009-06-15 12:47
#122495 #122495
User since
2003-08-04
12208 Artikel
Admin1
[Homepage]
user image
Das ist kein Bug und auch in 5.8 schon so.

Zunächst einmal:
use warnings lädt automatisch Carp.pm:
Code: (dl )
1
2
3
4
$ perl -wle'
use warnings;
print $INC{"Carp.pm"}'
/usr/share/perl/5.8/Carp.pm

Wenn du use warnings aus dem Beispiel rauslässt, solltest du denselben Fehler bekommen wie unter 5.10.

Zweitens: Warum kommt dieser Fehler bei require, aber nicht bei use?
Ganz einfach, ein use findet ganz zu Anfang statt, und wenn perl die Zeile mit dem Aufruf von confess() kompiliert, hat es Carp.pm schon geladen und weiss, aha, confess ist eine Funktion.
Wenn du es aber mit require lädst, weiss perl beim kompilieren der Zeile mit confess noch gar nicht, was confess überhaupt sein soll. Funktionsaufrufe, bei denen die Funktionen zur compile time noch nicht bekannt sind, brauchen Klammern.

edit: steht auch so in perlsub:
Quote
The "&" is optional in modern Perl, as are parentheses if the subroutine has been predeclared.

Last edited: 2009-06-15 13:04:52 +0200 (CEST)
Always code as if the guy who ends up maintaining your code will be a violent psychopath who knows where you live. -- Damian Conway in "Perl Best Practices"
lesen: Wiki:Wie frage ich & perlintro Wiki:brian's Leitfaden für jedes Perl-Problem

View full thread Perl bug in 5.10.0