Inline-Awk
view release on metacpan or search on metacpan
###############################################################################
#
# build(). This function is required by Inline See the Inline-API pod.
#
# Unlike other inline modules we don't interface with a compiler or
# interpreter. Instead we translate the awk code into Perl code using a2p and
# eval it into the user's program.
#
# The main body of the awk code is wrapped in a sub called awk() that the user
# can call. It accepts arguments and localised them into @ARGV.
#
# Any functions are stripped out and given there own copy of the global
# variables created by a2p. This allows the user to write functions and then
# call them from Perl.
#
# The code is derived from Foo.pm. The majority of the smoke and mirrors is
# handled by Inline.
#
sub build {
# Remove the shebang lines and the switch processing
splice(@code, 0, 9);
# Add code for processing args other than @ARGV and add a modified switch
# processor to take account of the fact that the code is being called from
# within a sub.
#
my @main = ( 'local @ARGV = @_ if @_;',
'',
'# process any FOO=bar switches',
'if (@ARGV) {',
' eval "\$$1$2;" while $ARGV[0] =~ /^(\w+=)(.*)/ '.
'&& shift @ARGV;',
'}',
''
);
awk('type=ini', 'example.ini'); # gives a warning with -w
awk('type="ini"', 'example.ini'); # no warning
The default action of an awk program is to loop over the files that it is passed as arguments. Therefore, the C<awk()> function without arguments is equivalent to inserting the following code into your Perl program:
while (<>) {
# Converted awk code here
}
As usual, the empty diamond operator, C<E<lt>E<gt>> will operate on C<@ARGV>, shifting off the elements until it is empty. Therefore, C<@ARGV> will be cleared after you call C<awk()>. However, C<awk()> creates a C<local> copy of any arguments that it...
awk(@ARGV);
# Do something else with @ARGV in Perl
An awk program doesn't loop over a file if it contains a BEGIN block only:
use Inline AWK;
awk();
( run in 0.503 second using v1.01-cache-2.11-cpan-49f99fa48dc )