... if you are really only interested in the number of occurrences and the files your are dealing with aren't extremely large, you could also read in the whole file at once. The follwing assumes that the filename was given as an argument on the command line.
use strict; use warnings; my $file = do { local $/; <> }; my $count = 0; ++$count while $file =~ /foo/g; print $count;
A few explanations: 'do' sets up a block and evaluates to the last statement in this block. Then we set the global variable $/ locally to undef (that means its former value is automatically restored when the block is exited). Setting this value to undef results in Perl going into slurp mode, i.e. it reads till the end of a file. The magic <> opens the command line arguments one at a time and (in scalar context) returns one line - and in slurp mode the whole file. Voila, $file contains now the whole contents.

Enlil already gave the good explanation of the next lines and this works in the same way for one line and for a whole file. In this context it might be interesting for you to look up the /m and /s modifiers for regexes.

-- Hofmator


In reply to Re: Counting text strings by Hofmator
in thread Counting text strings by vector40

Title:
Use:  <p> text here (a paragraph) </p>
and:  <code> code here </code>
to format your post, it's "PerlMonks-approved HTML":



  • Posts are HTML formatted. Put <p> </p> tags around your paragraphs. Put <code> </code> tags around your code and data!
  • Titles consisting of a single word are discouraged, and in most cases are disallowed outright.
  • Read Where should I post X? if you're not absolutely sure you're posting in the right place.
  • Please read these before you post! —
  • Posts may use any of the Perl Monks Approved HTML tags:
    a, abbr, b, big, blockquote, br, caption, center, col, colgroup, dd, del, details, div, dl, dt, em, font, h1, h2, h3, h4, h5, h6, hr, i, ins, li, ol, p, pre, readmore, small, span, spoiler, strike, strong, sub, summary, sup, table, tbody, td, tfoot, th, thead, tr, tt, u, ul, wbr
  • You may need to use entities for some characters, as follows. (Exception: Within code tags, you can put the characters literally.)
            For:     Use:
    & &amp;
    < &lt;
    > &gt;
    [ &#91;
    ] &#93;
  • Link using PerlMonks shortcuts! What shortcuts can I use for linking?
  • See Writeup Formatting Tips and other pages linked from there for more info.