I need to execute the same perl script, multiple times, on different files.
To ease the process, I am trying to save the perl script as a bash string, and call perl over
You simply have too many quotes in your string $S:
#!/bin/sh
# works
perl -e 'print 1;'
# also works
S='print 1;'
perl -e "$S"
I have also added some double quotes around "$S", which prevents problems with word splitting.
Another option is to use the -x switch to Perl:
#!/bin/sh
perl -x "$0"
echo <<EOF >/dev/null
#!/usr/bin/env perl
my $a=5;
print "$a\n";
__END__
EOF
echo 'something else'
$0 is the name of the current script, so Perl looks for the first line starting with #! and containing perl and interprets everything up to __END__ as a Perl script. The echo >/dev/null prevents the Perl script from being interpreted by the shell.