Beefy Boxes and Bandwidth Generously Provided by pair Networks
Clear questions and runnable code
get the best and fastest answer

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
Node Status?
node history
Node Type: note [id://216836]
[Corion]: Oooh. I had hoped that X::Tiny would be an X11 client or X11 server, but it is an exception framework :-)
[MidLifeXis]: How many languages would that 'Ex' alias handle. ETOOCUTE

How do I use this? | Other CB clients
Other Users?
Others making s'mores by the fire in the courtyard of the Monastery: (11)
As of 2017-02-27 11:48 GMT
Find Nodes?
    Voting Booth?
    Before electricity was invented, what was the Electric Eel called?

    Results (383 votes). Check out past polls.