This is a live mirror of the Perl 5 development currently hosted at https://github.com/perl/perl5
Make pos(@array) and pos(%hash) into errors
[perl5.git] / t / op / pos.t
CommitLineData
02c45c47
GS
1#!./perl
2
ee8ba353
SP
3BEGIN {
4 chdir 't' if -d 't';
5 @INC = '../lib';
6 require './test.pl';
7}
8
32a60974 9plan tests => 11;
02c45c47
GS
10
11$x='banana';
12$x=~/.a/g;
ee8ba353 13is(pos($x), 2);
02c45c47
GS
14
15$x=~/.z/gc;
ee8ba353 16is(pos($x), 2);
02c45c47
GS
17
18sub f { my $p=$_[0]; return $p }
19
20$x=~/.a/g;
ee8ba353 21is(f(pos($x)), 4);
02c45c47 22
084916e3
JH
23# Is pos() set inside //g? (bug id 19990615.008)
24$x = "test string?"; $x =~ s/\w/pos($x)/eg;
ee8ba353
SP
25is($x, "0123 5678910?");
26
e7cbf6c6
DM
27$x = "123 56"; $x =~ / /g;
28is(pos($x), 4);
29{ local $x }
30is(pos($x), 4);
0d7caf4c 31
93f09d7b 32# Explicit test that triggers the utf8_mg_len_cache_update() code path in
0d7caf4c
NC
33# Perl_sv_pos_b2u().
34
35$x = "\x{100}BC";
36$x =~ m/.*/g;
37is(pos $x, 3);
38
0607bed5
EB
39
40my $destroyed;
41{ package Class; DESTROY { ++$destroyed; } }
42
43$destroyed = 0;
44{
45 my $x = '';
46 pos($x) = 0;
47 $x = bless({}, 'Class');
48}
2154eca7 49is($destroyed, 1, 'Timely scalar destruction with lvalue pos');
32a60974
FC
50
51eval 'pos @a = 1';
52like $@, qr/^Can't modify array dereference in match position at /,
53 'pos refuses @arrays';
54eval 'pos %a = 1';
55like $@, qr/^Can't modify hash dereference in match position at /,
56 'pos refuses %hashes';
57eval 'pos *a = 1';
58is eval 'pos *a', 1, 'pos *glob works';