4 ms·
When I was @ yahoo! in mid 2000s, I used to argue with my principal engineer to great lengths on why he should consider Python for DevOps. Writing code in perl
by ram_rar 10y ago
When I was @ yahoo! in mid 2000s, I used to argue with my principal engineer to great lengths on why he should consider Python for DevOps. Writing code in perl felt like a pissing contest on who can obfuscate and make the code do insane things with least amount of characters.
Now, I have barely seen anyone use anything but Python (Golang maybe...) for this. Bottom line - readability matters! people have moved on and perl has outlived its purpose.
- SteveNuts 10y agoI feel the same way with Bash. It's great for one liners, but it breaks down when doing simple things like checking if a variable is a string or integer.
- brobinson 10y agoUgh. If I have to write Bash, I try to enforce some level of basic sanity with: set -euo pipefail I've seen way too many scripts catastrophically fail because of unbound variables or one side of a pipe failing and the script continuing anyways, etc.
- paulddraper 10y ago+1 to this. -e Abort at the first failed line -u Abort when undefined variable is used -o pipefail Piped commands return the status of the last failed command, rather than the status of the last command
- iamdave 10y agoYou are a wonderful person for doing this. As an ops guy, I tip my hat.
- DCoder 10y agoI use the verbose version for readability: set -o errexit set -o nounset set -o pipefail Some commands need custom error handling, which means turning off -e: set +o errexit ansible-playbook ... if [[ "$?" != "0" ]]; then echo -e "\e[1;31m""Error when executing ansible!""\e[0m" exit 1 fi set -o errexit And if you use -e , you will probably need the default value helper to validate input arguments: # the :- operator means "use the right side value if the left side ($1) is not set" env=${1:-} inventoryFile="${baseDir}/env/${env}/inventory" if [[ -f "${inventoryFile}" ]]; then echo -e "\e[1;31m""Invalid environment specified!""\e[0m" exit 1 fi
- Ded7xSEoPKYNsDd 10y agoI feel your first example is better written like this: if ! ansible-playbook ... ; then echo -e "\e[1;31m""Error when executing ansible!""\e[0m" exit 1 fi But generally when I need to work around errexit, I tend to add something like " || true" or " || xyz_failed=true" to the end of the command line instead of turning it off and on again.
- user5994461 10y agoI'm mostly using ansible instead of bash noawadays. Does all the same with more commands and better error handling.
- SteveNuts 10y agoSame here, but Ansible forces a basic knowledge of Python if you want to use it really well.
- babo 10y agoThere are limits for sure, but actually it's quite possible to write bash code at scale, but it requires some discipline and practice. It's hard to avoid it.
- xkxx 10y agoOne reason I still use perl for is its better regexes. In particular, I tend to use `perl -pe 's/regex/replacement/g'` instead of `sed 's/regex/replacement/g'` when I need to replace something. sed's regexes are just not good enough for some tasks.
- jldugger 10y agoSo like, Puppet & Chef are pretty big Ruby devops communities. And Ruby is fairly obviously inspired by Perl.
- ZenoArrow 10y agoRuby's name was inspired by Perl, but I'm curious to know which language structures you think were inspired by Perl.
- joseph 10y agoThe regular expression syntax; sigils on (some) variables; shortcuts like `bar if foo`; optional parenthesis on function calls; `chomp()` and `chop()`; those are just a few things that come to mind.
- cutler 10y agoRead up on Matz's account of how he developed Ruby and what were his influences. Larry Wall was top his list.
- coldtea 10y agoRuby has since forever been described as a cross between Perl and Smalltalk (and some other languages), including by its creator (Matz).
- throwaway2016a 10y ago> I have barely seen anyone use anything but Python (Golang maybe...) for this Odd. I see almost entirely Ruby. Especially with tools like Chef.