I think you have mis-understood the comment about prototypes. I suspect that you probably didn't even know that you were declaring a prototype.
The simple explanation is: when you define a sub X, do not put parens, () after the name. That's it. sub X(){} means something very different than just sub X{}. I would go as far as to say that you never have to, and normally should not put any (....stuff...) after the sub's name.
-What you have done with shift is 100% correct.
-Maybe chomp() is not necessary, but it doesn't "hurt".
-A more important point for me is to indent the lines within the subroutine by either 3 or 4 spaces.
"Prototype failure" example:
#!/usr/bin/perl -w
use strict;
# This sequence works, although with a warning...
# because Perl hasn't yet seen subroutine X.
X("xyz");
sub X() # this means that subroutine X cannot
# be called with any arugment at all.
# sub X(); #is ok,
# sub X("abc"); #is not ok.
{
my $input = shift;
print "$input\n";
}
#this would fail to produce a result - program fails to compile
# X("abc");
# because now that subroutine X() has been seen, it is understood
# that no arguments can be passed to it.
__END__
prints:
main::X() called too early to check prototype at C:\TEMP\prototypes.pl
+ line 4.
xyz
|