The Perl Toolchain Summit needs more sponsors. If your company depends on Perl, please support this very important event.
package ARGV::readonly;

use 5.00001;

$VERSION = '0.01';

sub import{
   # Tom Christiansen in Message-ID: <24692.1217339882@chthon>
   # reccomends essentially the following:
   for (@ARGV){
       s/^(\s+)/.\/$1/;	# leading whitespace preserved
       s/^/< /;		# force open for input
       $_.=qq/\0/;	# trailing whitespace preserved & pipes forbidden
   };
};


1;
__END__

=head1 NAME

ARGV::readonly - make <> open files regardless of leading/trailing whitespace and/or control characters such as |, >, amd <. 

=head1 SYNOPSIS

this module allows

  use ARGV::readonly;
  while(<>){
       ...

to be safer in hostile environments where one is bullheaded enough to
give * as the command line argument.  See rants on P5P from July, 2008.

=head1 DESCRIPTION

the code is shorter than the documentation.  Please look at it.

=head2 EXPORT

None by default.

=head1 TO DO

ideally a suite of ARGV::* modules will appear, each doing their little thing,
in a way that they won't stomp on each other's toes.  This module has no
exclusion interface or anything, so an @ARGV modifier that, for instance,
preprocesses *.gz into C<"gunzip -c $_ |"> is either going to have to undo
the mods made here or be incompatible.

=head1 HISTORY

=over 8

=item 0.01

modified suggestion made by Tom Christiansen in Message-ID: <24692.1217339882@chthon>

=back

=head1 SEE ALSO

L<Encode::Argv>

July 2008 perl5 porters archive

=head1 AUTHOR

furtively assembled by
David Nicol <davidnico@cpan.org>

=head1 COPYRIGHT AND LICENSE

This module is hereby placed in the public domain.

=cut