Beefy Boxes and Bandwidth Generously Provided by pair Networks
P is for Practical

Re: Re: Re: Perl cheat sheet

by TheDamian (Priest)
on Dec 02, 2002 at 01:33 UTC ( #216836=note: print w/replies, xml ) Need Help??

in reply to Re: Re: Perl cheat sheet
in thread Perl cheat sheet

Because "foo\n" =~ /foo$/, I tend to explain it differently. ^ and $ are begin and end of a line, but /m modifies the meaning of "line".

I don't see how that explanation can work, though. $ only ever means EOL when /m is operative. You can see that by running:

"foo\nbar" =~ /foo$/ or print "Didn't match EOL :-(\n";

I see that you've updated the sheet to just:

^ begin $ end (before \n)
Can I suggest that (if you also used the suggestion at the end of this node) that could just become:
^ start of str $ end of str (incl \n)
Those descriptions would be sufficient if you were also more explicit about /s and /m. Explaining that they mean singleline and multiline respectively doesn't really help newbies remember which is which or what each of them does. Heck, if uri hadn't taught me the mnemonic that /s changes a Single metacharacter (i.e. .) whilst /m changes Multiple metacharacters (i.e. ^ and $), then I still wouldn't be able to remember which is which myself!

So maybe you'd like to consider changing them to something like:

/m ^ = SOL, $ = EOL /s . matches \n too

Replies are listed 'Best First'.
Re: Re: Re: Re: Perl cheat sheet
by Juerd (Abbot) on Dec 02, 2002 at 07:42 UTC

    (Sorry, no quote, as I have currently no way of performing a copy/paste)

    I'll be so glad when Perl 6 arrives. While ^ usually isn't a problem, explaining $ can be tough. Maybe my "line" explanation wasn't clear.

    This is how I have always seen ^ and $:
    Without /m
    ^ matches the null-string at the beginning of a line;
    $ matches the null-string at the end of the line, just before \n, if present;
    The string has only one line, \n characters are ignored if they're not followed by \z.
    With /m
    ^ matches the null-string at the beginning of a line;
    $ matches the null-string at the end of the line, just before \n, if present;
    The string has multiple lines, each line begins after \A or \n, and ends before \n or \z.

    But you are probably correct in that this is a strange way of making things clear.

    I did remove "line" to avoid confusion. I think that "end of string" is a not a good explanation of $, unless /m is explained in more detail. Your new suggestion (mentioning what /s and /m do instead of what the modifiers stand for) helps. I hope it fits in the limited space. Update: it does :)

    If I were to explain it using regexes, I'd say $ is /m ? (?=\n|\z) : (?=\n?\z) and that ^ is /m ? (?:(?<=\A)|(?:<=\n)) : \A. I doubt that helps much for a cheat sheet, though :) (note: untested)

    Thanks again.

    - Yes, I reinvent wheels.
    - Spam: Visit eurotraQ.

Log In?

What's my password?
Create A New User
Domain Nodelet?
Node Status?
node history
Node Type: note [id://216836]
and the web crawler heard nothing...

How do I use this? | Other CB clients
Other Users?
Others avoiding work at the Monastery: (4)
As of 2021-10-20 18:40 GMT
Find Nodes?
    Voting Booth?
    My first memorable Perl project was:

    Results (81 votes). Check out past polls.