in reply to Use of uninitialized value in regexp

Hello bbb,

The variable $word is lexically scoped, meaning its scope extends only to the end of the block in which it is declared. Since you declare it in an if block which is itself within a while block, it is out of scope by the time you try to print it.

You need to declare $word before the while loop.1 If you had use strict; at the head of your script, it would highlight this kind of error for you.

1Update: Or move the print statement to within the if block.

Hope that helps,

Athanasius <°(((><contra mundum Iustus alius egestas vitae, eros Piratica,

Replies are listed 'Best First'.
Re^2: Use of uninitialized value in regexp
by bbb (Novice) on Feb 10, 2015 at 00:43 UTC

    Hi Athanasius,

    The code now works after I move the print inside if.

    My bad for missing this one. I've got one more question if you don't mind. When I put $ anchor after $word variable, I am having the same problem "Uninitialized $\ (since \t comes after $word -> $word$\t)". Could you give me a hint on how to deal with anchors that will be beside "\"?

    Thank you very much!

      In the expression  /foo$\t/ the RE compiler takes  $\ to be the  $OUTPUT_RECORD_SEPARATOR special scalar variable (see perlvar) and interpolates its value in the regex. One way to disambiguate  $ here would be to use the  /x regex modifier (see Modifiers in perlre) to introduce whitespace around the assertion:  /foo $ \t/x. However, this is meaningless because you're asking to match a pattern that has a  \t (tab) character beyond the end of the string! There is no such string. What is your real intent with this usage of the  $ assertion?

      Update: The  /m modifier (again, Modifiers) allows the  ^ $ anchor assertions to match against embedded  \n (newline) characters in a string, but again, the expression  / $ \t /xm is unmatchable because a  $ before an embedded newline would be followed by a  \n and not a  \t character.


      Give a man a fish:  <%-(-(-(-<

        Hi Anomalous Monk,

        Thank you for enlightening me that I will not be needing $ anchor for the said scenario. :)

        And thank you also for providing me details in how to deal with Modifiers.

        Thanks and regards!