perl

 view release on metacpan or  search on metacpan

t/op/lvref.t  view on Meta::CPAN

like $@, qr/^Assigned value is not a SCALAR reference at/,
    'assigning non-scalar ref to package scalar ref';
eval { my @x; \@x = {} };
like $@, qr/^Assigned value is not an ARRAY reference at/,
    'assigning non-array ref to array ref';
eval { \@::x = {} };
like $@, qr/^Assigned value is not an ARRAY reference at/,
    'assigning non-array ref to package array ref';
eval { my %x; \%x = [] };
like $@, qr/^Assigned value is not a HASH reference at/,
    'assigning non-hash ref to hash ref';
eval { \%::x = [] };
like $@, qr/^Assigned value is not a HASH reference at/,
    'assigning non-hash ref to package hash ref';
eval { use feature 'lexical_subs';
       no warnings 'experimental::lexical_subs';
       my sub x; \&x = [] };
like $@, qr/^Assigned value is not a CODE reference at/,
    'assigning non-code ref to lexical code ref';
eval { \&::x = [] };
like $@, qr/^Assigned value is not a CODE reference at/,
    'assigning non-code ref to package code ref';

eval { my $x; (\$x) = 3 };
like $@, qr/^Assigned value is not a reference at/,
    'list-assigning non-ref';
eval { my $x; (\$x) = [] };
like $@, qr/^Assigned value is not a SCALAR reference at/,
    'list-assigning non-scalar ref to scalar ref';
eval { (\$::x = []) };
like $@, qr/^Assigned value is not a SCALAR reference at/,
    'list-assigning non-scalar ref to package scalar ref';
eval { my @x; (\@x) = {} };
like $@, qr/^Assigned value is not an ARRAY reference at/,
    'list-assigning non-array ref to array ref';
eval { (\@::x) = {} };
like $@, qr/^Assigned value is not an ARRAY reference at/,
    'list-assigning non-array ref to package array ref';
eval { my %x; (\%x) = [] };
like $@, qr/^Assigned value is not a HASH reference at/,
    'list-assigning non-hash ref to hash ref';
eval { (\%::x) = [] };
like $@, qr/^Assigned value is not a HASH reference at/,
    'list-assigning non-hash ref to package hash ref';
eval { use feature 'lexical_subs';
       no warnings 'experimental::lexical_subs';
       my sub x; (\&x) = [] };
like $@, qr/^Assigned value is not a CODE reference at/,
    'list-assigning non-code ref to lexical code ref';
eval { (\&::x) = [] };
like $@, qr/^Assigned value is not a CODE reference at/,
    'list-assigning non-code ref to package code ref';

eval '(\do{}) = 42';
like $@, qr/^Can't modify reference to do block in list assignment at /,
    "Can't modify reference to do block in list assignment";
eval '(\pos) = 42';
like $@,
     qr/^Can't modify reference to match position in list assignment at /,
    "Can't modify ref to some scalar-returning op in list assignment";
eval '(\glob) = 42';
like $@,
     qr/^Can't modify reference to glob in list assignment at /,
    "Can't modify reference to some list-returning op in list assignment";
eval '\pos = 42';
like $@,
    qr/^Can't modify reference to match position in scalar assignment at /,
   "Can't modify ref to some scalar-returning op in scalar assignment";
eval '\(local @b) = 42';
like $@,
    qr/^Can't modify reference to localized parenthesized array in list(?x:
      ) assignment at /,
   q"Can't modify \(local @array) in list assignment";
eval '\local(@b) = 42';
like $@,
    qr/^Can't modify reference to localized parenthesized array in list(?x:
      ) assignment at /,
   q"Can't modify \local(@array) in list assignment";
eval '\local(@{foo()}) = 42';
like $@,
    qr/^Can't modify reference to array dereference in list assignment at/,
   q"'Array deref' error takes prec. over 'local paren' error";
eval '\(%b) = 42';
like $@,
    qr/^Can't modify reference to parenthesized hash in list assignment a/,
   "Can't modify ref to parenthesized package hash in scalar assignment";
eval '\(my %b) = 42';
like $@,
    qr/^Can't modify reference to parenthesized hash in list assignment a/,
   "Can't modify ref to parenthesized hash (\(my %b)) in list assignment";
eval '\my(%b) = 42';
like $@,
    qr/^Can't modify reference to parenthesized hash in list assignment a/,
   "Can't modify ref to parenthesized hash (\my(%b)) in list assignment";
eval '\%{"42"} = 42';
like $@,
    qr/^Can't modify reference to hash dereference in scalar assignment a/,
   "Can't modify reference to hash dereference in scalar assignment";
eval '$foo ? \%{"42"} : \%43 = 42';
like $@,
    qr/^Can't modify reference to hash dereference in scalar assignment a/,
   "Can't modify ref to whatever in scalar assignment via cond expr";
eval '\$0=~y///=0';
like $@,
    qr#^Can't modify transliteration \(tr///\) in scalar assignment a#,
   "Can't modify transliteration (tr///) in scalar assignment";

# Miscellaneous

{
  local $::TODO = ' ';
  my($x,$y);
  sub {
    sub {
      \$x = \$y;
    }->();
    is \$x, \$y, 'lexical alias affects outer closure';
  }->();
  is \$x, \$y, 'lexical alias affects outer sub where vars are declared';
}

 view all matches for this distribution
 view release on metacpan -  search on metacpan

( run in 0.750 second using v1.00-cache-2.02-grep-82fe00e-cpan-cec75d87357c )