Perl: the Markov chain saw | |
PerlMonks |
Re^2: Open Files in Unixby blazar (Canon) |
on Oct 14, 2008 at 17:37 UTC ( [id://717048]=note: print w/replies, xml ) | Need Help?? |
I personally believe that shell scripts should be written in shell, and Perl scripts in perl. Now, the distinction is not always clear, and there are corner cases, but yours is well close to the first category, to say the least: in fact someone suggested you inside-out solutions, namely, instead of a Perl program running find(1) a find(1) command running perl, and perl may be substituted with sed(1) there.
You're missing the single two most important lines for your program:
Others would add diagnostics to the list, but I regard it as "something more" whereas the former two are the very strictly close to fundamental, and I would only avoid them in onliners and in the simplest scripts.
Do you really want to print them like that? It will look awful!
Here and for the rest of your program, do a favour to yourself and use the three args form of open, possibly along with "lexical handles" (which will dispense you from the need of explicit close's) and most importantly, checking for success. If you're lazy and don't want to check individual open()'s, then you can use Fatal instead.
This is a specific idiodincrasy of mine: while perfectly valid Perl, it doesn't make much sense in that you should either take full advantage of $_ being a pronoun, and the topicalizer, thus used implicitly and by default by many functions and operators or use the binding operator =~ on a generic variable.
Here, you're thinking of using the backticks as above, but you made a typo. In absence of the checks that I and others, suggested you, you won't even notice. Which is the reason why we suggested you to do them in the first place.
This is the most serious error you've made thus far. You're opening a file for appending and then you're attempting to read from it. All in all, if I understand the logic you're after from your broken code, I presume you may be interested in the -i cli switch, or in the ^I special variable, or in reproducing their effects "manually," which you don't, as of now. So no surprise "it doesn't work:" you can't expect the effect of a s/// to propagate to a file only because you read the variable you're applying it to from that particular file.
In Section
Seekers of Perl Wisdom
|
|