summaryrefslogtreecommitdiff
path: root/t/op/flip.t
blob: 2706bf82cf33352662d5b66b0d177a6fb72c743f (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
#!./perl

BEGIN {
    chdir 't' if -d 't';
    require "./test.pl";
}

plan(14);

@a = (1,2,3,4,5,6,7,8,9,10,11,12);
@b = ();
while ($_ = shift(@a)) {
    if ($x = /4/../8/) { $z = $x; push @b, $x + 0; }
    $y .= /1/../2/;
}
is(join("*", @b), "1*2*3*4*5");

is($z, '5E0');

is($y, '12E0123E0');

@a = ('a','b','c','d','e','f','g');

{
local $.;

open(of,'harness') or die "Can't open harness: $!";
while (<of>) {
    (3 .. 5) && ($foo .= $_);
}
$x = ($foo =~ y/\n/\n/);

is($x, 3);

$x = 3.14;
ok(($x...$x) eq "1");

{
    # coredump reported in bug 20001018.008
    readline(UNKNOWN);
    $. = 1;
    $x = 1..10;
    ok(1);
}

}

ok(!defined $.);

use warnings;
my $warn='';
$SIG{__WARN__} = sub { $warn .= join '', @_ };

ok(scalar(0..2));

like($warn, qr/uninitialized/);
$warn = '';

$x = "foo".."bar";

ok((() = ($warn =~ /isn't numeric/g)) == 2);
$warn = '';

$. = 15;
ok(scalar(15..0));

push @_, \scalar(0..0) for 1,2;
isnt $_[0], $_[1], '\scalar($a..$b) gives a different scalar each time';

# This evil little example from ticket #122829 abused the fact that each
# recursion level maintained its own flip-flip state.  The following com-
# ment describes how it *used* to work.

# This routine maintains multiple flip-flop states, each with its own
# numeric ID, starting from 1.  Pass the ID as the argument.
sub f {
    my $depth = shift() - 1;
    return f($depth) if $depth;
    return /3/../5/;
}
{
    my $accumulator;
    for(1..20) {
        if (f(1)) {
            my $outer = $_;
            for(1..10){
                $accumulator .= "$outer $_\n" if f(2);
            }
        }
    }
    is $accumulator, <<EOT, 'recursion shares state';
3 1
3 2
3 3
3 4
3 5
13 1
13 2
13 3
13 4
13 5
EOT
}

# Void context gives parenthesized lhs scalar context
no warnings 'void';
sub c { $context = qw[ void scalar list ][wantarray + defined wantarray] }
(c())x34;
is $context, 'scalar', '(...)x... in void context';