package Math::Interval; sub matrix_norm { my ($mat_ref) = @_; my @row_sums; foreach my $row_ref (@$mat_ref) { my $sum = reduce { $a->abs() + $b->abs() } @$row_ref; push @row_sums, $sum; } return max @row_sums; } package main; my $a = Math::Interval::_interval(0.333333, 0.333334);
The problem is that you're using $a and $b. They are undefined in matrix_norm. strict does not yell about it because that variables are "reserved" for sort and sort of always exist. As soon as you change its names (recommended), you will know what's happening.
$ perl -Mstrict -e 'print $a; die' Name "main::a" used only once: possible typo at -e line 1. Use of uninitialized value in print at -e line 1. Died at -e line 1. $ perl -Mstrict -e 'print $abc; die' ## die not reached Global symbol "$abc" requires explicit package name at -e line 1. Execution of -e aborted due to compilation errors.
--
David Serrano
In reply to Re: Can't call method "abs" on an undefined value.
by Hue-Bond
in thread Can't call method "abs" on an undefined value.
by HollyKing
| For: | Use: | ||
| & | & | ||
| < | < | ||
| > | > | ||
| [ | [ | ||
| ] | ] |