I came across this, expecting it to be a typo for $@
:
use strict;
use warnings;
eval {
my $error = Not::Here->new();
};
warn @$;
And to my surprise it outputs this:
Can't locate object method "new" via package "Not::Here" (perhaps you forgot to load "Not::Here"?) at dollar_array.pl line 6. ...caught at dollar_array.pl line 9.
I'm unable to find any information about @$
, and it's not listed on perlvar, nor in eval
Since the output show caught at ...
, it seems that this is something in the exception handling of perl.
@$
has no meaning (yet) in Perl. It exists because $$
exists (for each special variable "sigil-char", all other "another_sigil-char" variables exist). Therefore, warn
gets no arguments - you can verify that by using just warn;
- you'll get the same output.
Now, let's read the documentation for warn:
If the output is empty and
$@
already contains a value (typically from a previous eval) that value is used after appending"\t...caught"
to$@
. This is useful for staying almost, but not entirely similar todie
.
$@
contains the exception from the eval
, so the behaviour is expected.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With