http://www.perlmonks.org?node_id=925800


in reply to Re: verbatim, non-interpolated assignment
in thread verbatim, non-interpolated assignment

It's

Oh. That was foolish of me not to notice. Thank you.

That's a semi-predicate problem and is unsolveable.

What is semi-predicate? It sounds theoretical.

In which version of Perl?

This is perl, v5.10.1 (*) built for i486-linux-gnu-thread-multi

You can read text via IO though.

Is that what onelesd is talking about? Is it in man perlio?

Replies are listed 'Best First'.
Re^3: verbatim, non-interpolated assignment
by Anonymous Monk on Sep 14, 2011 at 05:03 UTC

    What is semi-predicate? It sounds theoretical.

    What is google? semi-predicate -> http://en.wikipedia.org/wiki/Semipredicate_problem

    Simply it means return undef to signal failure, but it can return undef as valid value, so you can't differentiate between failure or just a valid value

    It applies here because perl expects perl syntax, so you can't inline arbitrary text verbatim as part of a perl program, it could be a perl program, so you have to quote/escape, like

    my $asCloseAsYouCanGet = <<'__TO_VERBATIM__'; other stuff not that is not __TO_VERBATIM__ on a single line __TO_VERBATIM__

    The text in $asCloseAsYouCanGet cannot contain __TO_VERBATIM__ on a single line as input, because __TO_VERBATIM__ on a single line is like the closing quote, it signals the end of the input, so it can't be valid input

    In other words, the semi-predicate problem, it can't be both valid input and closing quote, it has to be one or the other, not both

    Its like pictorial depictions of numbers, the symbol for the number one, 1, cannot be the same symbol for the number two, 1 , because you cannot tell when it means one or it means two

    1 + 1 + 1 = 4? See the first 1 is really one, the second 1 is really two, and the last one is really 1 , which adds up to four

    :)