perlquestion
svsingh
I have a directory with about thirty text files. I was trying to find an acronym in the directory, but I didn't really remember what it was (other than it was a four letter word starting with M).
<p>I tried a few one-liners, but none of them worked. Since I was just trying to find something really quickly, I decided to punt and just write a script to do what I wanted.</p>
<p>Now I'm trying to learn more about one-liners (I don't have any experience with them) just so I can handle this situation a bit better next time it comes up.</p>
<p>I should also note that I'm doing this from a Windows command prompt.</p>
<p>Here are some of the one-liners that I tried (in a for loop, single file example shown here):
<ul>
<li><code>perl -pe "m/M[A-Z]{3} /" 1-01.txt</code>
<br>Outputs the source file exactly.
<li><code>perl -pe "if (m/(M[A-Z]{3}) /) { print $1; }" 1-01.txt</code>
<br>Outputs the source file exactly.
</ul>
</p>
<p>And finally, here's the subroutine that actally did what I wanted:
<code>
my @files = <*.txt>;
undef $/;
foreach (@files) {
open ( FH, $_ );
my $txt = <FH>;
close ( FH );
while ( $txt =~ m/(M[A-Z]{3}) /gs ) { print " $1\n"; }
}
</code>
</p>
<p>Is there a way to do something like this as a one-liner? If so, then can I incorporate the glob into the one-liner? Thanks for your help.</p>
<sub><p>janitored by [ybiC]: Prepend tile wit "<i>One-liner</i>" for searchability</p></sub>