Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

What is Perl's $; variable for?

Tags:

perl

scalar

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.

like image 318
Ag. Avatar asked Feb 04 '10 17:02

Ag.


1 Answers

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.

like image 109
Greg Bacon Avatar answered Sep 21 '22 00:09

Greg Bacon