kikuchiyo has asked for the wisdom of the Perl Monks concerning the following question:
Consider the following script:
#!/usr/bin/perl use strict; use warnings; use Test::More; use Data::Dumper; my $hash = { '50' => [ 1 ] }; print Dumper $hash; is(keys %{$hash}, 1, q/keys %{$hash} is 1/); is(scalar @{$hash->{'50'}}, 1, q/$hash->{'50'} is 1/); is(scalar @{$hash->{'100'}}, 0, q/$hash->{'100'} is 0/); print Dumper $hash; done_testing();
With Perl 5.24.3 it runs to the end and all tests pass, even though I would expect that it dies with an "Can't use an undefined value as an ARRAY reference" error when it tries to dereference $hash->{'100'} which indeed does not exist.
Compare with
#!/usr/bin/perl use strict; use warnings; my $hash = { '50' => [ 1 ] }; print scalar @{$hash->{'100'}};
which dies with the expected error.
Under Perl 5.16 the first program also dies with the expected error. (This is how we initially noticed the problem: a program that was developed on 5.22+ needed to be ported to Centos 7 which has 5.16, and the tests began to fail there.)
What is going on here?
(Errata: Now I've ran with more Perl versions (perversions), and it doesn't die under perl 5.22 and above, but dies as expected under perl 5.20 and below)
|
|---|
| Replies are listed 'Best First'. | |
|---|---|
|
Re: Why doesn't this die with "Can't use an undefined value as an ARRAY reference"?"
by haukex (Archbishop) on Oct 18, 2017 at 18:57 UTC | |
by kikuchiyo (Hermit) on Oct 18, 2017 at 20:56 UTC | |
by haukex (Archbishop) on Oct 18, 2017 at 22:19 UTC | |
by kikuchiyo (Hermit) on Oct 19, 2017 at 13:50 UTC | |
by haukex (Archbishop) on Oct 19, 2017 at 16:01 UTC |