What is @$ in perl?
Asked Answered
B

1

7

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.

Burkett answered 12/3, 2016 at 9:13 Comment(0)
G
14

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

Glaydsglaze answered 12/3, 2016 at 9:27 Comment(0)

© 2022 - 2024 — McMap. All rights reserved.