http://www.perlmonks.org?node_id=1057045

SankoR has asked for the wisdom of the Perl Monks concerning the following question:

Still working through old reported issues and think I have another upstream bug. Take this:

use Tie::Array; tie my @array_t, 'Tie::StdArray'; my @array = @array_t = qw[aaa bbb ccc ddd eee]; print "plain smatch: " . (/a/ ~~ @array) . "\n"; print "plain grep: " . (grep {/a/} @array) . "\n"; print "tied smatch: " . (/a/ ~~ @array_t) . "\n"; print "tied grep: " . (grep {/a/} @array_t) . "\n";

When run on my v5.16.3 install, the smartmatch doesn't correctly match against the magically tied @array_t. Devel::Trace shows that it calls the array's FETCHSIZE method just like the tied grep but never bothers to FETCH the correct values. So, I end up with output that looks like:

Use of uninitialized value in pattern match (m//) at bugs.t line 6. Use of uninitialized value in pattern match (m//) at bugs.t line 6. Use of uninitialized value in pattern match (m//) at bugs.t line 6. Use of uninitialized value in pattern match (m//) at bugs.t line 6. Use of uninitialized value in pattern match (m//) at bugs.t line 6. plain smatch: 1 plain grep: 1 tied smatch: tied grep: 1

The warnings are obviously from smartmatch trying to match against undefined values. Can anyone verify that I'm not 'doing it wrong' before I submit a bug report to p5p?

Update: Reported as RT#120122.