in reply to Re^4: Global substitution of non-base-plane Unicode characters
in thread Global substitution of non-base-plane Unicode characters

If "the value of $\ is later changed" was a genuine concern, a better way would be to explicitly code the following rather than expecting a subsequent maintainer to automatically realise why printf was used here:

... { local $\; print "\x{FEFF}"; } ...

And, of course, a much better way to change $\ in the middle of the program, would be along these lines:

... code as it is now ... # later changes: ... { local $\ = "\n"; ... code using changed $\ ... } ...

-- Ken

Replies are listed 'Best First'.
Re^6: Global substitution of non-base-plane Unicode characters
by pjfarley3 (Initiate) on Feb 24, 2014 at 04:44 UTC

    I like your solution making the printing of the BOM a local block better than my use of printf, thank you. I will use that.

    Peter

Re^6: Global substitution of non-base-plane Unicode characters
by Jim (Curate) on Feb 24, 2014 at 17:43 UTC

    TIMTOWTDI.

    In Perl, printing exactly one character—a Unicode byte order mark—and nothing else is a special case of formatted printing, vis-à-vis generalized printing of lines of text with built-in programming conveniences (e.g., automatic newline handling).

    Would you find this troublesome?

    printf '%s', "\N{U+FEFF}";

    Or this?

    printf '%c', 0xfeff;

    Jim

      This really has nothing to do with what, if anything, I find "troublesome".

      You hit the nail on the head with your earlier post: "Using printf in this admittedly unusual way ...".

      Writing code in an unusual way (without any indication of why this was done) makes future maintenance error-prone.

      Yes, there's more than one way to do it. Here's another, that simply adds a comment, that I would consider better:

      printf "\x{FEFF}"; # printf() so $\ is not appended

      -- Ken