http://www.perlmonks.org?node_id=1172894


in reply to Re: Declaring and checking content of variables with consecutive names
in thread Declaring and checking content of variables with consecutive names

If you read data fields from an instrument into arrays periodically (for example, data obtained with a digital oscilloscope every second) wouldn't it make sense to give the arrays consecutive names such as @arr0000, @arr0001, (..), @arr0234, (...)? Similarly, if you save these data to disc, the name of the array would become the corresponding file name. We do this all the time (but we don't use Perl in this context).

Replies are listed 'Best First'.
Re^3: Declaring and checking content of variables with consecutive names
by hippo (Bishop) on Sep 29, 2016 at 08:27 UTC

    That approach would suffer from exactly the same problems as consecutively enumerated scalar variables. Perl has arrays of arrays so this is easily avoided by having just one single outer array each of whose elements are themselves an array. That way your code could declare just one @arr and then index into it for individual subarrays or within them for individual values.

      Thank you very much, I get your point regarding the two-dimensional array. On a related note, how would you store data to disk into consecutively named files? I would typically use a rootstring (something like $rootStr = 'dataFile' in Perl) and a counter $j, increment the counter in a loop, and print "$rootStr . $j" into a string "$fileNameString". Then I would want to name the file according to the contents of "$fileNameString". I understand, however, this is strongly discouraged in the Perl community. What approach would be better to make consecutively named files, using Perl?
        I understand, however, this is strongly discouraged in the Perl community.

        If I've understood your description correctly, there should be no discouragement at all to this. I assume you mean:

        my $fileroot = 'foo'; for my $j (0..999) { my $filename = $fileroot . $j; open (my $out, '>', $filename) or die "Cannot open file $filename fo +r writing: $!"; print $out "Hello world!\n"; close $out; }

        which seems a perfectly feasible way of achieving 1000 consecutively numbered files in one directory.