summaryrefslogtreecommitdiff
path: root/t/lib/feature/switch
blob: 0dee7f51cf91fe2d356bb52b8837b9bba7158204 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
Check the lexical scoping of the switch keywords.
(The actual behaviour is tested in t/op/switch.t)

__END__
# No switch; given should be a bareword.
use warnings; no warnings 'experimental::smartmatch';
print STDOUT given;
EXPECT
Unquoted string "given" may clash with future reserved word at - line 3.
given
########
# No switch; when should be a bareword.
use warnings; no warnings 'experimental::smartmatch';
print STDOUT when;
EXPECT
Unquoted string "when" may clash with future reserved word at - line 3.
when
########
# No switch; default should be a bareword.
use warnings; no warnings 'experimental::smartmatch';
print STDOUT default;
EXPECT
Unquoted string "default" may clash with future reserved word at - line 3.
default
########
# No switch; break should be a bareword.
use warnings; no warnings 'experimental::smartmatch';
print STDOUT break;
EXPECT
Unquoted string "break" may clash with future reserved word at - line 3.
break
########
# No switch; but continue is still a keyword
print STDOUT continue;
EXPECT
Can't "continue" outside a when block at - line 2.
########
# Use switch; so given is a keyword
use feature 'switch'; no warnings 'experimental::smartmatch';
given("okay\n") { print }
EXPECT
okay
########
# Use switch; so when is a keyword
use feature 'switch'; no warnings 'experimental::smartmatch';
given(1) { when(1) { print "okay" } }
EXPECT
okay
########
# Use switch; so default is a keyword
use feature 'switch'; no warnings 'experimental::smartmatch';
given(1) { default { print "okay" } }
EXPECT
okay
########
# Use switch; so break is a keyword
use feature 'switch';
break;
EXPECT
Can't "break" outside a given block at - line 3.
########
# switch out of scope; given should be a bareword.
use warnings; no warnings 'experimental::smartmatch';
{ use feature 'switch';
  given (1) {print "Okay here\n";}
}
print STDOUT given;
EXPECT
Unquoted string "given" may clash with future reserved word at - line 6.
Okay here
given
########
# switch out of scope; when should be a bareword.
use warnings; no warnings 'experimental::smartmatch';
{ use feature 'switch';
  given (1) { when(1) {print "Okay here\n";} }
}
print STDOUT when;
EXPECT
Unquoted string "when" may clash with future reserved word at - line 6.
Okay here
when
########
# switch out of scope; default should be a bareword.
use warnings; no warnings 'experimental::smartmatch';
{ use feature 'switch';
  given (1) { default {print "Okay here\n";} }
}
print STDOUT default;
EXPECT
Unquoted string "default" may clash with future reserved word at - line 6.
Okay here
default
########
# switch out of scope; break should be a bareword.
use warnings; no warnings 'experimental::smartmatch';
{ use feature 'switch';
  given (1) { break }  
}
print STDOUT break;
EXPECT
Unquoted string "break" may clash with future reserved word at - line 6.
break
########
# C<no feature 'switch'> should work
use warnings; no warnings 'experimental::smartmatch';
use feature 'switch';
given (1) { when(1) {print "Okay here\n";} }
no feature 'switch';
print STDOUT when;
EXPECT
Unquoted string "when" may clash with future reserved word at - line 6.
Okay here
when
########
# C<no feature> should work too
use warnings; no warnings 'experimental::smartmatch';
use feature 'switch';
given (1) { when(1) {print "Okay here\n";} }
no feature;
print STDOUT when;
EXPECT
Unquoted string "when" may clash with future reserved word at - line 6.
Okay here
when
########
# Without the feature, no 'Unambiguous use of' warning:
use warnings; no warnings 'experimental::smartmatch';
@break = ($break = "break");
print ${break}, ${break[0]};
EXPECT
breakbreak
########
# With the feature, we get an 'Unambiguous use of' warning:
use warnings; no warnings 'experimental::smartmatch';
use feature 'switch';
@break = ($break = "break");
print ${break}, ${break[0]};
EXPECT
Ambiguous use of ${break} resolved to $break at - line 5.
Ambiguous use of ${break[...]} resolved to $break[...] at - line 5.
breakbreak