tags:

views:

168

answers:

2

Does any 1 have any idea what is $; (first split function argument) in the following code snippet:

      local(@a) = ();
      local($i) = 0;
      for ($i = 0; $i < $d; $i++) {
         @a = split($;, @b[$i]);
         $c     = @a[0];
      }

The scalar is not found any where in the script other than in the for loop.

Any help is appreciated.

+12  A: 

Perl's special variables are documented in perlvar, including $;

$SUBSEP

$;

The subscript separator for multidimensional array emulation. If you refer to a hash element as

$foo{$a,$b,$c}

it really means

$foo{join($;, $a, $b, $c)}

But don't put

@foo{$a,$b,$c}  # a slice--note the @

which means

($foo{$a},$foo{$b},$foo{$c})

Default is "\034", the same as SUBSEP in awk. If your keys contain binary data there might not be any safe value for $;. (Mnemonic: comma (the syntactic subscript separator) is a semi-semicolon. Yeah, I know, it's pretty lame, but $, is already taken for something more important.)

Consider using "real" multidimensional arrays as described in perllol.

We could guess about why it's being used (e.g., maybe @b contains some hash's keys), but knowing how @b is created would let us provide more helpful answers.

Note also that @b[$i] and @a[0] should probably be

$b[$i]

and

$a[0]

instead. With the leading @, they're single-element array slices, but with $, they're simple scalars.

Greg Bacon
A: 

The Perl special variables are listed in perlvar.

Neeraj
Why did you link to some random (and outdated) page when you could have linked to the official Perl documentation?
Ether
NB: brian d foy has edited the question and it now links to the official documentation.
David Dorward
@Brian.. thanks@others: i will be careful from now and on.
Neeraj