-
-
Save mfontani/1042504 to your computer and use it in GitHub Desktop.
# Based on http://blogs.perl.org/users/randy_stauner/2011/06/exploratory-one-liners-with-less-typing.html | |
# and a couple more things which are *really* handy | |
function raptor { | |
case "$1" in | |
-*) break ;; | |
'') | |
echo "Syntax: raptor [-lneEp etc] 'code' | |
The code can make use of: | |
DD() to Data::Dumper::Dumper() a thing, D() to say() it | |
YY() to YAML::Dump() a thing, Y() to say() it | |
JEE() to JSON::XS::encode (utf8/pretty) a thing, JE() to say() it | |
JD() to JSON::XS::decode (utf8/allow nonref) a thing | |
R() to File::Slurp::read_file | |
W() to File::Slurp::write_file | |
S() to say() | |
"; | |
return 1;; | |
*) set -- -E "$@" ;; | |
esac | |
perl -MFile::Slurp -MJSON::XS -MData::Dumper -MYAML::XS -Mutf8::all -MClass::Autouse=:superloader -E " | |
sub D(\$) { say DD(shift) } | |
sub DD(\$) { Dumper(shift) } | |
sub Y(\$) { say YY(shift) } | |
sub YY(\$) { Dump(shift) } | |
sub JE(\$) { say JEE(shift) } | |
sub JEE(\$) { JSON::XS->new->utf8->pretty->encode(shift) } | |
sub JD(\$) { JSON::XS->new->utf8->allow_nonref->decode(shift) } | |
sub R(\$) { scalar read_file shift } | |
sub W(\$\$) { write_file @_ } | |
sub S { say @_ } | |
" $@ | |
} |
I guess mainly so one can use Perl's command-line arguments as they are used to, like perl -lnE' ... '
.
The above way (credits to the blog post!) also makes -E optional, as the shell sets it when not specified.
I did not look for a way to have the above done in Perl directly: the above method "works for me" :)
You can implement this in perl and still take advantage of command line options such as -lne. See my fork https://gist.github.com/1240122 for an example. Perl looks so much better than bash to me :) To use my version, you have to drop the file in ~/bin/p, and then you can invoke it like so p -lne '...'
. Also, for some reason, your version requires parens when calling the functions. To read in a file and print it out, you have to do: raptor 'S(R("foo.txt"))'
. In my version, that can be done via p 'S r "foo.txt"'
. I'm not sure why yours requires parens. Thanks for posting this. It was fun hacking on it.
Why isn't the entire script in perl?