Env-ShellWords

 view release on metacpan or  search on metacpan

lib/Env/ShellWords.pm  view on Meta::CPAN

    {
      no strict 'refs';
      tie my @list, __PACKAGE__, $var;
      *{"${caller}::${var}"} = \@list;
    }
    else
    {
      require Carp;
      Carp::croak("Env::ShellWords does not work with $var");
    }
  }
}

1;

__END__

=pod

=encoding UTF-8

=head1 NAME

Env::ShellWords - Environment variables for arguments as array

=head1 VERSION

version 0.02

=head1 SYNOPSIS

 # Tie Interface
 use Env::ShellWords;
 tie my @CFLAGS,  'Env::ShellWords', 'CFLAGS';
 tie my @LDFLAGS, 'Env::ShellWords', 'LDFLAGS';

 # same thing with import interface:
 use Env::ShellWords qw( @CFLAGS @LDFLAGS );

 # usage:
 $ENV{CFLAGS} = '-DBAR=1';
 unshift @CFLAGS, '-I/foo/include';
 push @CFLAGS, '-DFOO=Define With Spaces';
 
 # now:
 # $ENV{CFLAGS} = '-I/foo/include -DBAR=1 -DFOO=Define\\ With\\ Spaces';
 
 unshift @LDFLAGS, '-L/foo/lib';
 push @LDFLAGS, '-lfoo';

=head1 DESCRIPTION

This module provides an array like interface to environment variables
that contain flags.  For example Autoconf can uses the environment
variables like C<CFLAGS> or C<LDFLAGS>, and this allows you to manipulate
those variables without doing space quoting and other messy mucky stuff.

The intent is to use this from L<alienfile> to deal with hierarchical
prerequisites.

You can provide split and join callbacks when you tie:

 use Env::ShellWords;
 # split on any space, ignore quotes
 tie my @FOO, 'Env::ShellWords',
   sub { split /\s+/, $_[0] },
   sub { join ' ', @_ };

Which may be useful if you have to split on words on an operating
system with a different specification.

=head1 CAVEATS

Not especially fast.  C<undef> gets mapped to the empty string C<''>
since C<undef> doesn't have a meaning as an argument in a string.

Writing to an environment variable using this interface is inherently
lossy.

=head1 SEE ALSO

L<Env>

=head1 AUTHOR

Graham Ollis <plicease@cpan.org>

=head1 COPYRIGHT AND LICENSE

This software is copyright (c) 2017 by Graham Ollis.

This is free software; you can redistribute it and/or modify it under
the same terms as the Perl 5 programming language system itself.

=cut



( run in 0.561 second using v1.01-cache-2.11-cpan-39bf76dae61 )