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.