Guten Abend,
ich habe hier ein kleines Perlproblem, zumindest denke ich das. Das ganze fiel mir beim Spielen mit Switch.pm auf.
Folgender Quellcode funktioniert wie er soll:
1 use strict; 2 use warnings; 3 use Switch;
4 my $val = 1;
5 sub testsub { 6 my $thisval = shift;
7 switch ($thisval) { 8 case 1 { print "number 1" } 9 case "a" { print "string a" } 10 case [1..10,42] { print "number in list" } 11 else { print "previous case not true" } 12 } 13 }
14 testsub($val)
Ändere ich jetzt allerdings die Zeile 5 so,
5 sub testsub($)
das &testsub mit einem Prototyp (wie es sich gehört) definiert ist, beschwert sich Perl:
Number found where operator expected at test.pl line 11, near "case 1" (Do you need to predeclare case?) String found where operator expected at test.pl line 12, near "case "a"" (Do you need to predeclare case?) syntax error at test.pl line 10, near ") {" syntax error at test.pl line 12, near "case "a"" Execution of test.pl aborted due to compilation errors. 255
Wobei hier das $-Zeichen das Problem zu sein scheint, nehme ich ein @, funktioniert es.
Kann mir das jemand erklären, habe ich Perl verlernt, oder ist es etwa kaputt?
P.S.: Getestet auf perl, v5.8.8 perl, v5.8.5
Viele Grüße! Marcus
Hi Marcus,
On 2/27/07, Marcus Obst marcus.obst@s2003.tu-chemnitz.de wrote:
Kann mir das jemand erklären, habe ich Perl verlernt, oder ist es etwa kaputt?
aus der Doku:
There are undoubtedly serious bugs lurking somewhere in code this funky :-) ... Due to the heuristic nature of Switch.pm's source parsing, the presence of regexes specified with raw "?...?" delimiters may cause mysterious errors. The workaround is to use "m?...?" instead.
Due to the way source filters work in Perl, you can't use Switch inside an string "eval".
If your source file is longer then 1 million characters and you have a switch statement that crosses the 1 million (or 2 million, etc.) char- acter boundary you will get mysterious errors. The workaround is to use smaller source files.
Ich hatte auch schon manche Merkwürdigkeiten mit Switch.pm erlebt. Nimm einfach Ruby, dann geht's. ;-)
Viele Grüße, Torsten
Marcus Obst marcus.obst@s2003.tu-chemnitz.de (Di 27 Feb 2007 21:23:30 CET):
das &testsub mit einem Prototyp (wie es sich gehört) definiert ist, beschwert sich Perl:
Number found where operator expected at test.pl line 11, near "case 1" (Do you need to predeclare case?) String found where operator expected at test.pl line 12, near "case "a"" (Do you need to predeclare case?) syntax error at test.pl line 10, near ") {" syntax error at test.pl line 12, near "case "a"" Execution of test.pl aborted due to compilation errors. 255
Wobei hier das $-Zeichen das Problem zu sein scheint, nehme ich ein @, funktioniert es.
sub testval($;) ...
Aber auch nur mit probieren gefunden, nachdem ich gelesen habe, daß Text::Balanced verwendet wird und dann gedacht, vielleicht "$)" ein Problem sein könnte.
lug-dd@mailman.schlittermann.de