Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

What is @$ in perl?

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.

like image 511
bolav Avatar asked Mar 12 '16 09:03

bolav


1 Answers

@$ 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 to die.

$@ contains the exception from the eval, so the behaviour is expected.

like image 199
choroba Avatar answered Sep 30 '22 20:09

choroba