<i>> We will have a beautiful DSL so you don’t have to quote arguments as string...</i><p>If i'm using Perl's <i>Shell.pm</i> (as mentioned elsewhere here by <i>btilly</i>) and wanted to avoid quoting arguments then I could do:<p><pre><code> use 5.016;
use warnings;
use Shell ();
use PerlX::QuoteOperator ls => {
-emulate => 'qq',
-with => sub ($) { Shell::ls($_[0]) },
};
use PerlX::QuoteOperator uname => {
-emulate => 'qq',
-with => sub ($) { Shell::uname($_[0]) },
};
use PerlX::QuoteOperator ip => {
-emulate => 'qq',
-with => sub ($) { Shell::ip($_[0]) },
};
# and then...
ls();
uname(-a);
ip(-4 addr);
</code></pre>
But this seems to be an overkill because I could just use Perl's backticks (<a href="http://perldoc.perl.org/perlop.html#Quote-Like-Operators" rel="nofollow">http://perldoc.perl.org/perlop.html#Quote-Like-Operators</a>)...<p><pre><code> `ls`;
`uname -a`;
`ip -4 addr`;
</code></pre>
And it works with variables...<p><pre><code> my $x = "/usr/local/";
my $files = `ls -l $x`;
</code></pre>
and piping...<p><pre><code> my $perl_files = `ls | grep .pl`;
</code></pre>
<i>Shell.pm</i> also works with variables & piping but I think that backticks are probably Perl's best <i>DSL</i> for dealing (easily) with shell stuff :)