Merkwürdiges Verhalten
am 14.03.2007 11:31:09 von Ferry Bolhar
Hallo liebe NG, ich habe folgenden Code:
use warnings;
sub hallo(*) {
my $val = shift;
print "val = $val\n";
}
hallo(test);
Da ich Warnings enabled habe, erhalte ich nicht unerwartet:
Unquoted string "test" may clash with future reserved word at...
val = test
So weit, so gut.
Nun füge ich die Zeile
use strict; (oder "use strict 'subs';")
nach (oder auch vor) dem "use warnings" ein.
Die Ausgabe ist jetzt nur mehr
val = test
d.h., die Warnungsmeldung ist verschwunden.
Ist dieses Verhalten (das Unterdrücken dieser Warnung
mit "use strict 'subs'") irgendwo dokumentiert bzw. weiß
jemand, warum das passiert?
Perl-Versionen: 5.8.6, 5.8.8, 5.9.4.
LG, Ferry
--
Ing Ferry Bolhar
Magistrat der Stadt Wien - MA 14
A-1010 Wien
E-Mail: bol@adv.magwien.gv.at
Re: Merkwürdiges Verhalten
am 14.03.2007 12:14:13 von Frank Seitz
Ferry Bolhar wrote:
> use warnings;
>
> sub hallo(*) {
> my $val = shift;
> print "val = $val\n";
> }
>
> hallo(test);
>
> Da ich Warnings enabled habe, erhalte ich nicht unerwartet:
>
> Unquoted string "test" may clash with future reserved word at...
> val = test
Ich erwarte diese Meldung wegen der Prototype-Deklaration
eigentlich nicht:
| A "*" allows the subroutine to accept a bareword, constant, scalar
| expression, typeglob, or a reference to a typeglob in that slot.
Grüße
Frank
--
Dipl.-Inform. Frank Seitz; http://www.fseitz.de/
Anwendungen für Ihr Internet und Intranet
Tel: 04103/180301; Fax: -02; Industriestr. 31, 22880 Wedel
Re: Merkwürdiges Verhalten
am 14.03.2007 15:57:45 von Ferry Bolhar
Frank Seitz:
> Ich erwarte diese Meldung wegen der Prototype-Deklaration
> eigentlich nicht:
Ich weiß nicht, ob das etwas damit zu tun hat - man bekommt
die Meldung ja mit open (das intern als Prototype "*;$@"
verwendet) auch:
use warnings;
use strict;
open in,'x.x';
gibt die "may clash" Meldung aus - auch mit "use strict". Nur bei
eigenen Funktionen mit Prototype "*" wird sie unterdrückt.
Ohne Prototype-Deklaration würde "strict subs" Barewords
überhaupt nicht erlauben, egal ob klein oder groß:
use strict 'subs';
open IN,'x.x';
gibt:
Bareword "IN" not allowed while "strict subs" in use
LG, Ferry
--
Ing Ferry Bolhar
Magistrat der Stadt Wien - MA 14
A-1010 Wien
E-Mail: bol@adv.magwien.gv.at
Re: Merkwürdiges Verhalten
am 14.03.2007 16:25:12 von Frank Seitz
Ferry Bolhar wrote:
> Frank Seitz:
>>
>>Ich erwarte diese Meldung wegen der Prototype-Deklaration
>>eigentlich nicht:
>
> Ich weiß nicht, ob das etwas damit zu tun hat - man bekommt
> die Meldung ja mit open (das intern als Prototype "*;$@"
> verwendet) auch:
>
> use warnings;
> use strict;
> open in,'x.x';
>
> gibt die "may clash" Meldung aus - auch mit "use strict". Nur bei
> eigenen Funktionen mit Prototype "*" wird sie unterdrückt.
open() ist eben ein Builtin, da kann die Sache etwas
anders aussehen und tut sie offenbar auch. Filehandles
werden per Konvention ja groß geschrieben.
> Ohne Prototype-Deklaration würde "strict subs" Barewords
> überhaupt nicht erlauben, egal ob klein oder groß:
>
> use strict 'subs';
> open IN,'x.x';
>
> gibt:
>
> Bareword "IN" not allowed while "strict subs" in use
Bei mir kommt
Name "main::IN" used only once: possible typo at ...
was normal ist, da IN hier ja nicht weiter verwendet wird.
Grüße
Frank
--
Dipl.-Inform. Frank Seitz; http://www.fseitz.de/
Anwendungen für Ihr Internet und Intranet
Tel: 04103/180301; Fax: -02; Industriestr. 31, 22880 Wedel