1#!./perl
2
3BEGIN {
4    chdir 't';
5    @INC = '../lib';
6    require './test.pl';
7}
8
9plan tests => 13;
10
11eval { for (\2) { $_ = <FH> } };
12like($@, 'Modification of a read-only value attempted', '[perl #19566]');
13
14{
15  open A,"+>a"; $a = 3;
16  is($a .= <A>, 3, '#21628 - $a .= <A> , A eof');
17  close A; $a = 4;
18  is($a .= <A>, 4, '#21628 - $a .= <A> , A closed');
19  unlink "a";
20}
21
22# 82 is chosen to exceed the length for sv_grow in do_readline (80)
23foreach my $k (1, 82) {
24  my $result
25    = runperl (stdin => '', stderr => 1,
26              prog => "\$x = q(k) x $k; \$a{\$x} = qw(v); \$_ = <> foreach keys %a; print qw(end)",
27	      );
28  $result =~ s/\n\z// if $^O eq 'VMS';
29  is ($result, "end", '[perl #21614] for length ' . length('k' x $k));
30}
31
32
33foreach my $k (1, 21) {
34  my $result
35    = runperl (stdin => ' rules', stderr => 1,
36              prog => "\$x = q(perl) x $k; \$a{\$x} = q(v); foreach (keys %a) {\$_ .= <>; print}",
37	      );
38  $result =~ s/\n\z// if $^O eq 'VMS';
39  is ($result, ('perl' x $k) . " rules", 'rcatline to shared sv for length ' . length('perl' x $k));
40}
41
42# These COW tests are not going to show up anything on 5.8.x (No Copy On Write)
43# but they do no harm, and it makes life easier to keep this file fully in
44# sync with 5.9.x
45
46foreach my $l (1, 82) {
47  my $k = $l;
48  $k = 'k' x $k;
49  my $copy = $k;
50  $k = <DATA>;
51  is ($k, "moo\n", 'catline to COW sv for length ' . length $copy);
52}
53
54
55foreach my $l (1, 21) {
56  my $k = $l;
57  $k = 'perl' x $k;
58  my $perl = $k;
59  $k .= <DATA>;
60  is ($k, "$perl rules\n", 'rcatline to COW sv for length ' . length $perl);
61}
62
63use strict;
64use File::Spec;
65
66open F, File::Spec->curdir and sysread F, $_, 1;
67my $err = $! + 0;
68close F;
69
70SKIP: {
71  skip "you can read directories as plain files", 2 unless( $err );
72
73  $!=0;
74  open F, File::Spec->curdir and $_=<F>;
75  ok( $!==$err && !defined($_) => 'readline( DIRECTORY )' );
76  close F;
77
78  $!=0;
79  { local $/;
80    open F, File::Spec->curdir and $_=<F>;
81    ok( $!==$err && !defined($_) => 'readline( DIRECTORY ) slurp mode' );
82    close F;
83  }
84}
85
86__DATA__
87moo
88moo
89 rules
90 rules
91