P
Paul Lalli
I've been pounding my head on this for almost a day, and I'm still not
seeing what I'm doing wrong. Can someone please give me a hand?
This (short-but-complete) script works as expected:
#!/usr/bin/perl
use strict;
use warnings;
use Switch;
sub foobar ($\%) {
my $foo = shift;
my $hash_ref = shift;
switch ('hello'){
case (/^[A-Z]+$/) { print "All upper\n"; }
case (/^[a-z]+$/) { print "All lower\n"; }
else { print "Mixed case\n"; }
}
}
my %temp;
foobar('world', %temp);
__END__
All lower
If, however, I switch the order of the prototyped arguments to the
subrtouine, I get a syntax error involving the switch block:
#!/usr/bin/perl
use strict;
use warnings;
use Switch;
sub foobar (\%$) {
my $hash_ref = shift;
my $foo = shift;
switch ('hello'){ # <== LINE 9
case (/^[A-Z]+$/) { print "All upper\n"; }
case (/^[a-z]+$/) { print "All lower\n"; } # <== LINE 11
else { print "Mixed case\n"; }
}
}
my %temp;
foobar(%temp, 'world');
__END__
syntax error at switchtest.pl line 9, near "){"
syntax error at line 11, near ") {"
Execution of switchtest.pl aborted due to compilation errors.
This seems to occur only when the prototype involves a \% , and that \%
appears as anything but the last element in the prototype list. If the
\% is last, the script parses correctly.
I have seen this behavior on both perl 5.8.5 for Solaris and
Activestate's perl 5.8.4 for Windows, both using Switch.pm v2.10
Can someone please point me at what I'm doing wrong? Is \% somehow
disallowed as anything but the last prototype element? (This seems
unlikely, as the script will work fine if the switch block is removed,
regardless of where the \% occurs).
Thank you,
Paul Lalli
seeing what I'm doing wrong. Can someone please give me a hand?
This (short-but-complete) script works as expected:
#!/usr/bin/perl
use strict;
use warnings;
use Switch;
sub foobar ($\%) {
my $foo = shift;
my $hash_ref = shift;
switch ('hello'){
case (/^[A-Z]+$/) { print "All upper\n"; }
case (/^[a-z]+$/) { print "All lower\n"; }
else { print "Mixed case\n"; }
}
}
my %temp;
foobar('world', %temp);
__END__
All lower
If, however, I switch the order of the prototyped arguments to the
subrtouine, I get a syntax error involving the switch block:
#!/usr/bin/perl
use strict;
use warnings;
use Switch;
sub foobar (\%$) {
my $hash_ref = shift;
my $foo = shift;
switch ('hello'){ # <== LINE 9
case (/^[A-Z]+$/) { print "All upper\n"; }
case (/^[a-z]+$/) { print "All lower\n"; } # <== LINE 11
else { print "Mixed case\n"; }
}
}
my %temp;
foobar(%temp, 'world');
__END__
syntax error at switchtest.pl line 9, near "){"
syntax error at line 11, near ") {"
Execution of switchtest.pl aborted due to compilation errors.
This seems to occur only when the prototype involves a \% , and that \%
appears as anything but the last element in the prototype list. If the
\% is last, the script parses correctly.
I have seen this behavior on both perl 5.8.5 for Solaris and
Activestate's perl 5.8.4 for Windows, both using Switch.pm v2.10
Can someone please point me at what I'm doing wrong? Is \% somehow
disallowed as anything but the last prototype element? (This seems
unlikely, as the script will work fine if the switch block is removed,
regardless of where the \% occurs).
Thank you,
Paul Lalli