35

Example:

my $some_variable;
my @some_variable;
my %some_variable;

I know, @ seems to be for array, $ for primitive, is it totally right? What is % for?

Franz Kafka
  • 10,623
  • 20
  • 93
  • 149
nicola
  • 2,141
  • 1
  • 19
  • 19

4 Answers4

40

One of the nice things about Perl is that it comes with a built in manual. Type in the following command:

perldoc perlintro

and take a look at the section Perl variable types. You can also see this on line with the perldoc.perl.org section on Perl variables.

A quick overview:

  • $foo is a scalar variable. It can hold a single value which can be a string, numeric, etc.
  • @foo is an array. Arrays can hold multiple values. You can access these values using an index. For example $foo[0] is the first element of the array and $foo[1] is the second element of the array, etc. (Arrays usually start with zero).
  • %foo is a hash, this is like an array because it can hold more than one value, but hashes are keyed arrays. For example, I have a password hash called %password. This is keyed by the user name and the values are the user's password. For example:

    $password{Fred} = "swordfish"; $password{Betty} = "secret";

    $user = "Fred"; print "The Password for user $user is $password{$user}\n"; #Prints out Swordfish $user = "Betty"; print "The Password for user $user is $password{$user}\n"; #Prints out secret

Note that when you refer to a single value in a hash or array, you use the dollar sign. It's a little confusing for beginners.

I would recommend that you get the Llama Book. The Llama Book is Learning Perl and is an excellent introduction to the language.

David W.
  • 105,218
  • 39
  • 216
  • 337
  • 2
    What about a @ before a $? In the example below - $baseball_team_ids is passed to a subroutine then referenced in a new variable creation. my $total_ids = scalar(@$baseball_teamIDs); – Chris Lambrou Aug 04 '20 at 14:03
23

$ is for scalars, @ is for arrays, and % is for hashes. See the Variable Types section of the docs for more information.

HoldOffHunger
  • 18,769
  • 10
  • 104
  • 133
eldarerathis
  • 35,455
  • 10
  • 90
  • 93
13

$ is scalar, @ is array, and % is hash.

Paul Tomblin
  • 179,021
  • 58
  • 319
  • 408
  • yeah, but why $_ and @_ are the same for containing pass-in parameters to a funcction? or i'm wrong? – nicola Apr 05 '11 at 15:11
  • 1
    @nicola, Array and hash elements use "$". `$_[0]` is the first element of `@_`. Both are unrelasted to `$_`. – ikegami Apr 05 '11 at 15:25
  • 5
    @nicola => `@_` is an array containing all of the arguments passed to a function. `$_` is a scalar containing the current item being worked with in situations like `for (@array) {...}`. `$_` has nothing to do with `@_`. Where you are likely getting confused is that to access an individual element of the argument list, you would write `$_[0]`, which accesses the first element. Here the sigil changes to `$` to denote that you are accessing a scalar, however the trailing `[0]` tells perl that it is accessing a scalar element of the array in `_` or in other words, `@_`. – Eric Strom Apr 05 '11 at 15:30
5

$var denotes a single-valued scalar variable
@var denotes an array
%var denotes an associative array or hash (they are both the same)

ennuikiller
  • 46,381
  • 14
  • 112
  • 137