Rafael spotted that my changes caused warnings. So clean up.
[p5sagit/p5-mst-13.2.git] / t / comp / opsubs.t
CommitLineData
02c3ec76 1#!./perl -T
2
3use warnings;
4use strict;
5$|++;
6
7=pod
8
9Even if you have a C<sub q{}>, calling C<q()> will be parsed as the
10C<q()> operator. Calling C<&q()> or C<main::q()> gets you the function.
11This test verifies this behavior for nine different operators.
12
13=cut
14
15use Test::More tests => 36;
16
17sub m { return "m-".shift }
18sub q { return "q-".shift }
19sub qq { return "qq-".shift }
20sub qr { return "qr-".shift }
21sub qw { return "qw-".shift }
22sub qx { return "qx-".shift }
23sub s { return "s-".shift }
24sub tr { return "tr-".shift }
25sub y { return "y-".shift }
26
27# m operator
28can_ok( 'main', "m" );
29SILENCE_WARNING: { # Complains because $_ is undef
30 no warnings;
31 isnt( m('unqualified'), "m-unqualified", "m('unqualified') is oper" );
32}
33is( main::m('main'), "m-main", "main::m() is func" );
34is( &m('amper'), "m-amper", "&m() is func" );
35
36# q operator
37can_ok( 'main', "q" );
38isnt( q('unqualified'), "q-unqualified", "q('unqualified') is oper" );
39is( main::q('main'), "q-main", "main::q() is func" );
40is( &q('amper'), "q-amper", "&q() is func" );
41
42# qq operator
43can_ok( 'main', "qq" );
44isnt( qq('unqualified'), "qq-unqualified", "qq('unqualified') is oper" );
45is( main::qq('main'), "qq-main", "main::qq() is func" );
46is( &qq('amper'), "qq-amper", "&qq() is func" );
47
48# qr operator
49can_ok( 'main', "qr" );
50isnt( qr('unqualified'), "qr-unqualified", "qr('unqualified') is oper" );
51is( main::qr('main'), "qr-main", "main::qr() is func" );
52is( &qr('amper'), "qr-amper", "&qr() is func" );
53
54# qw operator
55can_ok( 'main', "qw" );
56isnt( qw('unqualified'), "qw-unqualified", "qw('unqualified') is oper" );
57is( main::qw('main'), "qw-main", "main::qw() is func" );
58is( &qw('amper'), "qw-amper", "&qw() is func" );
59
60# qx operator
61can_ok( 'main', "qx" );
62eval "qx('unqualified')";
83176b6e 63TODO: {
64 local $TODO = $^O eq 'MSWin32' ? "Tainting of PATH not working of Windows" : $TODO;
65 like( $@, qr/^Insecure/, "qx('unqualified') doesn't work" );
66}
02c3ec76 67is( main::qx('main'), "qx-main", "main::qx() is func" );
68is( &qx('amper'), "qx-amper", "&qx() is func" );
69
70# s operator
71can_ok( 'main', "s" );
72eval "s('unqualified')";
73like( $@, qr/^Substitution replacement not terminated/, "s('unqualified') doesn't work" );
74is( main::s('main'), "s-main", "main::s() is func" );
75is( &s('amper'), "s-amper", "&s() is func" );
76
77# tr operator
78can_ok( 'main', "tr" );
79eval "tr('unqualified')";
80like( $@, qr/^Transliteration replacement not terminated/, "tr('unqualified') doesn't work" );
81is( main::tr('main'), "tr-main", "main::tr() is func" );
82is( &tr('amper'), "tr-amper", "&tr() is func" );
83
84# y operator
85can_ok( 'main', "y" );
86eval "y('unqualified')";
87like( $@, qr/^Transliteration replacement not terminated/, "y('unqualified') doesn't work" );
88is( main::y('main'), "y-main", "main::y() is func" );
89is( &y('amper'), "y-amper", "&y() is func" );
90
91=pod
92
93from irc://irc.perl.org/p5p 2004/08/12
94
95 <kane-xs> bug or feature?
96 <purl> You decide!!!!
97 <kane-xs> [kane@coke ~]$ perlc -le'sub y{1};y(1)'
98 <kane-xs> Transliteration replacement not terminated at -e line 1.
99 <Nicholas> bug I think
100 <kane-xs> i'll perlbug
101 <rgs> feature
102 <kane-xs> smiles at rgs
103 <kane-xs> done
104 <rgs> will be closed at not a bug,
105 <rgs> like the previous reports of this one
106 <Nicholas> feature being first class and second class keywords?
107 <rgs> you have similar ones with q, qq, qr, qx, tr, s and m
108 <rgs> one could say 1st class keywords, yes
109 <rgs> and I forgot qw
110 <kane-xs> hmm silly...
111 <Nicholas> it's acutally operators, isn't it?
112 <Nicholas> as in you can't call a subroutine with the same name as an
113 operator unless you have the & ?
114 <kane-xs> or fqpn (fully qualified package name)
115 <kane-xs> main::y() works just fine
116 <kane-xs> as does &y; but not y()
117 <Andy> If that's a feature, then let's write a test that it continues
118 to work like that.
119
120=cut