# in scalar context an array
# will return the number of its elements
print scalar @lines;
#which leads to
if (scalar @lines) {
#array is not (an) empty (list)
...
}
Regarding your question there is no need to worry if th earray gets newly populated each time, but if not in a block (especially loop) you might avoid such case by simply resetting the array with "@lines = ();".
Have a nice day
All decision is left to your taste | [reply] [d/l] |
If the program returned 5 lines the first time, and only 2 the next, won't there be lines left over from the first time? How can I tell how many _additional_ lines I got back?
This rather depends on how you have things scoped. If the backticks are in a subroutine that gets called multiple times, each invocation of the routine will get a new array if the backticks line is coded as:
my @lines = `findgsc ...`;
If you move the declaration of @lines higher in the script, and then do
@lines = `findgsc ...`;
multiple times, each one overwrites @lines with new values. To get a delta on line count (i.e., note additional lines), merely save the prior count. Conceptually,
@lines = `finedgsc ...`;
$prevLines = scalar @lines;
@lines = `findgsc ...`;
if ( scalar @lines > $prevLines ) {
# we got more this time
}
Note that scalar @lines is the absolute line count, while $#lines is the final index in the array, which will be one less than the absolute count. Which to use is a matter of style, but don't confuse the two.
| [reply] [d/l] [select] |
If the program returned 5 lines the first time, and only 2 the next, won't there be lines left over from the first time?
Actually, despite what others here may have said, you do not have to worry about anything. Unlike traditional languages, an array in Perl is not just a name for a series of consecutive memory addresses (just like scalars are not just names for single memory addresses); it is a smart data type (again, scalars are too) which may grow and shrink, moving about in memory as circumstances demand etc. It does what traditional languages require you to implement linked lists for, and more.
The whole point of this explanation:
my @a=(1,2,3,4,5);
@a=(1,2,3);
print "@a\n";
=output
1 2 3
Perl does the nitty gritty of keeping things clean for you. Garbage collection, undef, references being smart unlike pointers, and so and so forth..
Makeshifts last the longest. | [reply] [d/l] |
| [reply] |