in reply to Interpolate variable name in Perl?
The following echoes Eily's suggestion:
use strict; use warnings; my @AoA; while (<DATA>) { chomp; push @AoA, [ split '' ]; } for my $i ( 0 .. @AoA - 1 ) { for my $j ( 0 .. @{ $AoA[0] } - 1 ) { print "String $i; Char $j: '$AoA[$i]->[$j]'\n" } print "\n"; } __DATA__ String 1. Another 2 abcdefghi
Output:
String 0; Char 0: 'S' String 0; Char 1: 't' String 0; Char 2: 'r' String 0; Char 3: 'i' String 0; Char 4: 'n' String 0; Char 5: 'g' String 0; Char 6: ' ' String 0; Char 7: '1' String 0; Char 8: '.' String 1; Char 0: 'A' String 1; Char 1: 'n' String 1; Char 2: 'o' String 1; Char 3: 't' String 1; Char 4: 'h' String 1; Char 5: 'e' String 1; Char 6: 'r' String 1; Char 7: ' ' String 1; Char 8: '2' String 2; Char 0: 'a' String 2; Char 1: 'b' String 2; Char 2: 'c' String 2; Char 3: 'd' String 2; Char 4: 'e' String 2; Char 5: 'f' String 2; Char 6: 'g' String 2; Char 7: 'h' String 2; Char 8: 'i'
$AoA[$i]->[$j] explained:
$AoA[$i]->[$j] ^ ^ ^ | | | | | + - Character number in string | + - Dereferencing arrow + - String number in array
The above builds an array of arrays (AoA) by splitting each string on an empty string to create a list of the string's characters in an anonymous array whose reference is pushed onto @AoA. The nested loops iterate through the AoA, using the dereferencing arrow -> to access each character. The notation @{ $AoA[0] } - 1 was used to obtain the number of characters in the dereferenced array (effectively the string length), since you mentioned that each string had the same length.
Hope this helps!
|
|---|