First up: never just add stuff to suppress warnings or errors. Figure out what the cause is and fix the cause!
In this case the warning was telling you something you needed to know. Lets boil the code down a little to demonstrate the issue:
#!/usr/bin/env/perl use strict; use warnings; reduce(1); sub reduce { my @array = @_; print $array[-2]; }
Prints:
Use of uninitialized value in print at ...\noname1.pl line 10.
Changing the call to reduce(1, 2); works as expected. The actual problem is you are passing only one argument and using that to populate the array. You then try to access the array expecting two arguments.
Note that much of your code is fairly old school. In particular don't use & to call functions - it doesn't do what you expect. Also, don't use @array[$idx]. If you want a single element use $array[$id] - $ instead of @.
In reply to Re^3: How to write testable command line script?
by GrandFather
in thread How to write testable command line script?
by thechartist
For: | Use: | ||
& | & | ||
< | < | ||
> | > | ||
[ | [ | ||
] | ] |