3 ms·
Perl's big win for one-liners is braces syntax. Interestingly, there are already projects to add braces syntax[1]. Two of the three Perl features are also Pyth
by ben509 7y ago
Perl's big win for one-liners is braces syntax. Interestingly, there are already projects to add braces syntax[1].
Two of the three Perl features are also Python features, namely -m to run a module and -c to run code on the command line.
Regarding Perl being a better shell, there are modules like `doit` and `invoke` that make Python far better than perl for managing jobs, precisely because they make forking off jobs super easy.
But now that you mention it... I want to write a module to make python one-liners easy.
[1]: https://pypi.org/project/brackets/ https://pypi.org/project/brackets/
- gerikson 7y agoCan you show an example of using doit and invoke to fork off jobs in Python? I’m pretty sure Perl has had similar functionality for some time.
- ben509 7y agoYeah, perl borrows backticks from bash[3], so it's giving you syntax to do it directly, and it's long had strong support for opening a process using a very intuitive syntax. Python's subprocess module works quite well, but gets extremely verbose[4] as you try to do anything more complex than "run a command and get the output" and has some nasty gotchas[2]. I forget the invoke syntax, but doit[1] is basically a make replacement so calling the shell is pretty easy: def task_something(): return {'actions': ['ls foo/', 'rm -r foo']} And you can use outputs from one task as inputs for another, it tracks what's been done, etc. [1]: https://pydoit.org/ https://pydoit.org/ [2]: https://docs.python.org/3/library/subprocess.html#subprocess.Popen.stderr https://docs.python.org/3/library/subprocess.html#subprocess... [3]: https://perldoc.perl.org/5.30.0/perlop.html#qx%2f_STRING_%2f https://perldoc.perl.org/5.30.0/perlop.html#qx%2f_STRING_%2f [4]: https://docs.python.org/3/library/subprocess.html#popen-constructor https://docs.python.org/3/library/subprocess.html#popen-cons...
- gerikson 7y agoHow can one do something like fork/exec in python? That's what I was thinking of when you mentioned "forking off jobs". There are a number of different ways to launch an external process from Perl, I think this StackOverflow answer summarizes them quite well: https://stackoverflow.com/a/800105 https://stackoverflow.com/a/800105 I'm an experienced Perl user, but I'm not as familiar with Python. In addition, I'm not really using Perl for sysadmin stuff, so I tend to try to keep stuff "within" Perl. As an example, I'd rather use the File::Find module than use backticks to invoke `find`. This has really nothing to do with functionality - I'm almost always on Linux, and the syntaxes are similarly hairy - it's just that usually you get more powerful functionality using the Perl functionality. (edit rearranged paragraphs)