Fix example #4 in perlXStut
[p5sagit/p5-mst-13.2.git] / t / pragma / subs.t
CommitLineData
8ebc5c01 1#!./perl
2
3BEGIN {
4 chdir 't' if -d 't';
5 @INC = '../lib';
6 $ENV{PERL5LIB} = '../lib';
7}
8
9$| = 1;
10undef $/;
11my @prgs = split "\n########\n", <DATA>;
12print "1..", scalar @prgs, "\n";
13
14my $tmpfile = "tmp0000";
15my $i = 0 ;
161 while -f ++$tmpfile;
17END { unlink $tmpfile if $tmpfile; }
18
19for (@prgs){
20 my $switch = "";
21 my @temps = () ;
22 if (s/^\s*-\w+//){
23 $switch = $&;
24 }
25 my($prog,$expected) = split(/\nEXPECT\n/, $_);
26 if ( $prog =~ /--FILE--/) {
27 my(@files) = split(/\n--FILE--\s*([^\s\n]*)\s*\n/, $prog) ;
28 shift @files ;
29 die "Internal error test $i didn't split into pairs, got " .
30 scalar(@files) . "[" . join("%%%%", @files) ."]\n"
31 if @files % 2 ;
32 while (@files > 2) {
33 my $filename = shift @files ;
34 my $code = shift @files ;
35 push @temps, $filename ;
36 open F, ">$filename" or die "Cannot open $filename: $!\n" ;
37 print F $code ;
38 close F ;
39 }
40 shift @files ;
41 $prog = shift @files ;
42 }
43 open TEST, "| sh -c './perl $switch' >$tmpfile 2>&1";
44 print TEST $prog, "\n";
45 close TEST;
46 my $status = $?;
47 my $results = `cat $tmpfile`;
48 $results =~ s/\n+$//;
49 $expected =~ s/\n+$//;
50 my $prefix = ($results =~ s/^PREFIX\n//) ;
51 if ( $results =~ s/^SKIPPED\n//) {
52 print "$results\n" ;
53 }
54 elsif (($prefix and $results !~ /^\Q$expected/) or
55 (!$prefix and $results ne $expected)){
56 print STDERR "PROG: $switch\n$prog\n";
57 print STDERR "EXPECTED:\n$expected\n";
58 print STDERR "GOT:\n$results\n";
59 print "not ";
60 }
61 print "ok ", ++$i, "\n";
62 foreach (@temps)
63 { unlink $_ if $_ }
64}
65
66__END__
67
68# Error - not predeclaring a sub
69Fred 1,2 ;
70sub Fred {}
71EXPECT
72Number found where operator expected at - line 3, near "Fred 1"
73 (Do you need to predeclare Fred?)
74syntax error at - line 3, near "Fred 1"
75Execution of - aborted due to compilation errors.
76########
77
78# Error - not predeclaring a sub in time
79Fred 1,2 ;
80use subs qw( Fred ) ;
81sub Fred {}
82EXPECT
83Number found where operator expected at - line 3, near "Fred 1"
84 (Do you need to predeclare Fred?)
85syntax error at - line 3, near "Fred 1"
86Execution of - aborted due to compilation errors.
87########
88
89# AOK
90use subs qw( Fred) ;
91Fred 1,2 ;
92sub Fred { print $_[0] + $_[1], "\n" }
93EXPECT
943
95########
96
97# override a built-in function
98use subs qw( open ) ;
99open 1,2 ;
100sub open { print $_[0] + $_[1], "\n" }
101EXPECT
1023
103########
104
105--FILE-- abc
106Fred 1,2 ;
1071;
108--FILE--
109use subs qw( Fred ) ;
110require "./abc" ;
111sub Fred { print $_[0] + $_[1], "\n" }
112EXPECT
1133
114########
115
116# check that it isn't affected by block scope
117{
118 use subs qw( Fred ) ;
119}
120Fred 1, 2;
121sub Fred { print $_[0] + $_[1], "\n" }
122EXPECT
1233