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.
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 asSUBSEPin 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.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With