Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

New type of 'word boundary' - true when not in the middle of a word #15219

Open
p5pRT opened this issue Mar 7, 2016 · 12 comments
Open

New type of 'word boundary' - true when not in the middle of a word #15219

p5pRT opened this issue Mar 7, 2016 · 12 comments

Comments

@p5pRT
Copy link

p5pRT commented Mar 7, 2016

Migrated from rt.perl.org#127670 (status was 'open')

Searchable as RT127670$

@p5pRT
Copy link
Author

p5pRT commented Mar 7, 2016

From @epa

Created by @epa

When doing a search-and-replace you may wrap the regular expression in
\b anchors to stop it matching in the middle of a word. s/red/green/g
will change credit to cgreenit but s/\bred\b/green/g does not have
this bug.

However, you may not know ahead of time whether your source regexp is
itself a word. If you unconditionally wrap it in \b anchors then that
in turn will break if the start or end is not a word character.

  /\b x[(][)] \b/x # will fail to match 'x()-1' or 'x()'

What you need to do instead is something like

  say 'please enter source and replacement strings​:';
  chomp (my $source = <>);
  chomp (my $replacement = <>);
  while (<>) {
  s/(?​:\\b|(?!\\w))\Q$source\E(?​:\\b|(?<!\\w))/$replacement/g
  && print "replaced​: $_";
  }

These (?​:\\b|(?!\\w)) and (?​:\\b|(?<!\\w)) incantations are useful
enough that they deserve their own anchor. Rather than matching only
at a word boundary, it would match only at a point that is not in the
middle of a word. That could be a word boundary or it could just be
some point in between two non-word characters. In other words the
new anchor matches

  - at start of string
  - at end of string
  - when either or both of the surrounding characters are \W

(Subjective experience​: this has come up a couple of times, and the
'solution' of wrapping a regexp in \b anchors is obvious and only
subtly wrong, so I do think this would help avoid a common regular
expression bug, and falls under "easy things should be easy".)

FWIW, the different definition \b{wb} works means that it does not
suffer from this problem. Normally you can wrap an arbitrary regexp
in \b{wb} anchors and it will match only when not partway through
a word at start or end. So this might argue for steering users
towards \b{wb} instead of \b.

Perl Info

Flags:
    category=core
    severity=wishlist

Site configuration information for perl 5.22.1:

Configured by Red Hat, Inc. at Wed Mar  2 13:26:46 UTC 2016.

Summary of my perl5 (revision 5 version 22 subversion 1) configuration:
   
  Platform:
    osname=linux, osvers=4.3.5-300.fc23.x86_64, archname=x86_64-linux-thread-multi
    uname='linux buildvm-19.phx2.fedoraproject.org 4.3.5-300.fc23.x86_64 #1 smp mon feb 1 03:18:41 utc 2016 x86_64 x86_64 x86_64 gnulinux '
    config_args='-des -Doptimize=none -Dccflags=-O2 -g -pipe -Wall -Werror=format-security -Wp,-D_FORTIFY_SOURCE=2 -fexceptions -fstack-protector-strong --param=ssp-buffer-size=4 -grecord-gcc-switches  -m64 -mtune=generic -Dldflags=-Wl,-z,relro  -Dccdlflags=-Wl,--enable-new-dtags -Wl,-z,relro  -Dlddlflags=-shared -Wl,-z,relro  -Dshrpdir=/usr/lib64 -DDEBUGGING=-g -Dversion=5.22.1 -Dmyhostname=localhost -Dperladmin=root@localhost -Dcc=gcc -Dcf_by=Red Hat, Inc. -Dprefix=/usr -Dvendorprefix=/usr -Dsiteprefix=/usr/local -Dsitelib=/usr/local/share/perl5 -Dsitearch=/usr/local/lib64/perl5 -Dprivlib=/usr/share/perl5 -Dvendorlib=/usr/share/perl5/vendor_perl -Darchlib=/usr/lib64/perl5 -Dvendorarch=/usr/lib64/perl5/vendor_perl -Darchname=x86_64-linux-thread-multi -Dlibpth=/usr/local/lib64 /lib64 /usr/lib64 -Duseshrplib -Dusethreads -Duseithreads -Dusedtrace=/usr/bin/dtrace -Duselargefiles -Dd_semctl_semun -Di_db -Ui_ndbm -Di_gdbm -Di_shadow -Di_syslog -Dman3ext=3pm -Duseperlio -Dinstallusrbinperl=n -Ubincompat5005 -Uversiononly -Dpager=/usr/bin/less -isr -Dd_gethostent_r_proto -Ud_endhostent_r_proto -Ud_sethostent_r_proto -Ud_endprotoent_r_proto -Ud_setprotoent_r_proto -Ud_endservent_r_proto -Ud_setservent_r_proto -Dscriptdir=/usr/bin -Dusesitecustomize'
    hint=recommended, useposix=true, d_sigaction=define
    useithreads=define, usemultiplicity=define
    use64bitint=define, use64bitall=define, uselongdouble=undef
    usemymalloc=n, bincompat5005=undef
  Compiler:
    cc='gcc', ccflags ='-D_REENTRANT -D_GNU_SOURCE -O2 -g -pipe -Wall -Werror=format-security -Wp,-D_FORTIFY_SOURCE=2 -fexceptions -fstack-protector-strong --param=ssp-buffer-size=4 -grecord-gcc-switches -m64 -mtune=generic -fwrapv -fno-strict-aliasing -I/usr/local/include -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64',
    optimize='  -g',
    cppflags='-D_REENTRANT -D_GNU_SOURCE -O2 -g -pipe -Wall -Werror=format-security -Wp,-D_FORTIFY_SOURCE=2 -fexceptions -fstack-protector-strong --param=ssp-buffer-size=4 -grecord-gcc-switches -m64 -mtune=generic -fwrapv -fno-strict-aliasing -I/usr/local/include'
    ccversion='', gccversion='5.3.1 20151207 (Red Hat 5.3.1-2)', gccosandvers=''
    intsize=4, longsize=8, ptrsize=8, doublesize=8, byteorder=12345678, doublekind=3
    d_longlong=define, longlongsize=8, d_longdbl=define, longdblsize=16, longdblkind=3
    ivtype='long', ivsize=8, nvtype='double', nvsize=8, Off_t='off_t', lseeksize=8
    alignbytes=8, prototype=define
  Linker and Libraries:
    ld='gcc', ldflags ='-Wl,-z,relro  -fstack-protector-strong -L/usr/local/lib'
    libpth=/usr/local/lib64 /lib64 /usr/lib64 /usr/local/lib /usr/lib /lib/../lib64 /usr/lib/../lib64 /lib
    libs=-lpthread -lresolv -lnsl -lgdbm -ldb -ldl -lm -lcrypt -lutil -lc -lgdbm_compat
    perllibs=-lpthread -lresolv -lnsl -ldl -lm -lcrypt -lutil -lc
    libc=libc-2.22.so, so=so, useshrplib=true, libperl=libperl.so
    gnulibc_version='2.22'
  Dynamic Linking:
    dlsrc=dl_dlopen.xs, dlext=so, d_dlsymun=undef, ccdlflags='-Wl,--enable-new-dtags -Wl,-z,relro '
    cccdlflags='-fPIC', lddlflags='-shared -Wl,-z,relro  -L/usr/local/lib -fstack-protector-strong'

Locally applied patches:
    Fedora Patch1: Removes date check, Fedora/RHEL specific
    Fedora Patch3: support for libdir64
    Fedora Patch4: use libresolv instead of libbind
    Fedora Patch5: USE_MM_LD_RUN_PATH
    Fedora Patch6: Skip hostname tests, due to builders not being network capable
    Fedora Patch7: Dont run one io test due to random builder failures
    Fedora Patch15: Define SONAME for libperl.so
    Fedora Patch16: Install libperl.so to -Dshrpdir value
    Fedora Patch22: Document Math::BigInt::CalcEmu requires Math::BigInt (CPAN RT#85015)
    Fedora Patch26: Make *DBM_File desctructors thread-safe (RT#61912)
    Fedora Patch27: Make PadlistNAMES() lvalue again (CPAN RT#101063)
    Fedora Patch28: Make magic vtable writable as a work-around for Coro (CPAN RT#101063)
    Fedora Patch29: Fix CVE-2016-2381 (ambiguous environment variables handling)
    Fedora Patch200: Link XS modules to libperl.so with EU::CBuilder on Linux
    Fedora Patch201: Link XS modules to libperl.so with EU::MM on Linux


@INC for perl 5.22.1:
    /usr/local/lib64/perl5
    /usr/local/share/perl5
    /usr/lib64/perl5/vendor_perl
    /usr/share/perl5/vendor_perl
    /usr/lib64/perl5
    /usr/share/perl5
    .


Environment for perl 5.22.1:
    HOME=/home/eda
    LANG=en_GB.UTF-8
    LANGUAGE (unset)
    LC_COLLATE=C
    LC_CTYPE=en_GB.UTF-8
    LC_MESSAGES=en_GB.UTF-8
    LC_MONETARY=en_GB.UTF-8
    LC_NUMERIC=en_GB.UTF-8
    LC_TIME=en_GB.UTF-8
    LD_LIBRARY_PATH (unset)
    LOGDIR (unset)
    PATH=/home/eda/bin:/home/eda/bin:/usr/local/bin:/usr/bin:/sbin:/usr/sbin:/sbin:/usr/sbin
    PERL_BADLANG (unset)
    SHELL=/bin/bash

This email is intended only for the person to whom it is addressed and may contain confidential information. Any retransmission, copying, disclosure or other use of, this information by persons other than the intended recipient is prohibited. If you received this email in error, please contact the sender and delete the material. This email is for information only and is not intended as an offer or solicitation for the purchase or sale of any financial instrument. Wadhwani Asset Management LLP is a Limited Liability Partnership registered in England (OC303168) with registered office at 40 Berkeley Square, 3rd Floor, London, W1J 5AL. It is authorised and regulated by the Financial Conduct Authority.

@p5pRT
Copy link
Author

p5pRT commented Mar 8, 2016

From @khwilliamson

On Mon Mar 07 10​:16​:47 2016, eda@​waniasset.com wrote​:

This is a bug report for perl from eda@​waniasset.com,
generated with the help of perlbug 1.40 running under perl 5.22.1.

-----------------------------------------------------------------
[Please describe your issue here]

When doing a search-and-replace you may wrap the regular expression in
\b anchors to stop it matching in the middle of a word. s/red/green/g
will change credit to cgreenit but s/\bred\b/green/g does not have
this bug.

However, you may not know ahead of time whether your source regexp is
itself a word. If you unconditionally wrap it in \b anchors then that
in turn will break if the start or end is not a word character.

/\b x[(][)] \b/x # will fail to match 'x()-1' or 'x()'

What you need to do instead is something like

say 'please enter source and replacement strings​:';
chomp (my $source = <>);
chomp (my $replacement = <>);
while (<>) {
s/(?​:\\b|(?!\\w))\Q$source\E(?​:\\b|(?<!\\w))/$replacement/g
&& print "replaced​: $_";
}

These (?​:\\b|(?!\\w)) and (?​:\\b|(?<!\\w)) incantations are useful
enough that they deserve their own anchor. Rather than matching only
at a word boundary, it would match only at a point that is not in the
middle of a word. That could be a word boundary or it could just be
some point in between two non-word characters. In other words the
new anchor matches

- at start of string
- at end of string
- when either or both of the surrounding characters are \W

(Subjective experience​: this has come up a couple of times, and the
'solution' of wrapping a regexp in \b anchors is obvious and only
subtly wrong, so I do think this would help avoid a common regular
expression bug, and falls under "easy things should be easy".)

FWIW, the different definition \b{wb} works means that it does not
suffer from this problem. Normally you can wrap an arbitrary regexp
in \b{wb} anchors and it will match only when not partway through
a word at start or end. So this might argue for steering users
towards \b{wb} instead of \b.

One type of bound that was considered but hasn't been implemented because it was too close to the wb one is to break at \s/\S boundaries. This is trivial to implement, and since wb is more suitable for natural language processing, this might not be as close to it as we thought. That is, it might actually be useful for processing things like code

--
Karl Williamson

@p5pRT
Copy link
Author

p5pRT commented Mar 8, 2016

The RT System itself - Status changed from 'new' to 'open'

@p5pRT
Copy link
Author

p5pRT commented Mar 8, 2016

From @epa

I agree that \s\S boundaries might be a useful thing to support. However it
is not suitable for the applications I am considering​: a -w (match whole
words) flag in a grep-like tool, which needs to accept arbitrary regexps and
match /hello/ against "hello, world"; and code search and replace where you
might want to change red to green, matching in "red+1" or "red()".

If a 'not in the middle of a word' anchor is thought too obscure to go into
core then it could be in Regexp​::Common or a similar module. But I think it
is in fact more generally useful than \b. Consider

  /\bhello\b/ # OK
  /\b\Q$str\E\b/ # may not do what you want

If \y is an anchor which matches at start, end, or next to any \W, then

  /\yhello\y/ # also OK
  /\y\Q$str\E\y/ # OK

So in the common case of matching a literal word and protecting its start or
end, either works, but if you then generalize that to arbitrary regexps
(whether or not constructed with \Q...\E) then you may fall into bugs with \b.

(Above I am assuming that 'what you want' is to avoid 'the Scunthorpe problem'
of matching a substring within some longer word. It might be that you do
really want to match something like a % sign immediately followed by the
start of a word, and for that /%\b/ works. Tho personally I would be more
likely to use /%\w/ for this case.)

--
Ed Avis <eda@​waniasset.com>

@p5pRT
Copy link
Author

p5pRT commented Mar 8, 2016

From @demerphq

On 7 March 2016 at 19​:16, Ed Avis <perlbug-followup@​perl.org> wrote​:

# New Ticket Created by "Ed Avis"
# Please include the string​: [perl #127670]
# in the subject line of all future correspondence about this issue.
# <URL​: https://rt-archive.perl.org/perl5/Ticket/Display.html?id=127670 >

This is a bug report for perl from eda@​waniasset.com,
generated with the help of perlbug 1.40 running under perl 5.22.1.

-----------------------------------------------------------------
[Please describe your issue here]

When doing a search-and-replace you may wrap the regular expression in
\b anchors to stop it matching in the middle of a word. s/red/green/g
will change credit to cgreenit but s/\bred\b/green/g does not have
this bug.

However, you may not know ahead of time whether your source regexp is
itself a word. If you unconditionally wrap it in \b anchors then that
in turn will break if the start or end is not a word character.

/\\b x\[\(\]\[\)\] \\b/x     \# will fail to match 'x\(\)\-1' or 'x\(\)'

What you need to do instead is something like

say 'please enter source and replacement strings&#8203;:';
chomp \(my $source = \<>\);
chomp \(my $replacement = \<>\);
while \(\<>\) \{
    s/\(?&#8203;:\\\\b|\(?\!\\\\w\)\)\\Q$source\\E\(?&#8203;:\\\\b|\(?\<\!\\\\w\)\)/$replacement/g
      && print "replaced&#8203;: $\_";
\}

These (?​:\\b|(?!\\w)) and (?​:\\b|(?<!\\w)) incantations are useful
enough that they deserve their own anchor.

I don't know about that. It is not clear to me that that *is* actually
so useful or commonplace, or a complete solution to the underlying
problem that it is worthy for taking a escape.

On the other hand a better solution for this would be useful.

Rather than matching only
at a word boundary, it would match only at a point that is not in the
middle of a word. That could be a word boundary or it could just be
some point in between two non-word characters. In other words the
new anchor matches

- at start of string
- at end of string
- when either or both of the surrounding characters are \W

(Subjective experience​: this has come up a couple of times, and the
'solution' of wrapping a regexp in \b anchors is obvious and only
subtly wrong, so I do think this would help avoid a common regular
expression bug, and falls under "easy things should be easy".)

FWIW, the different definition \b{wb} works means that it does not
suffer from this problem. Normally you can wrap an arbitrary regexp
in \b{wb} anchors and it will match only when not partway through
a word at start or end. So this might argue for steering users
towards \b{wb} instead of \b.

That is interesting. I would like to hear more opinions from people on
how important they think this is.

Yves

@p5pRT
Copy link
Author

p5pRT commented Mar 13, 2016

From @arc

demerphq <demerphq@​gmail.com> wrote​:

On 7 March 2016 at 19​:16, Ed Avis <perlbug-followup@​perl.org> wrote​:

These (?​:\\b|(?!\\w)) and (?​:\\b|(?<!\\w)) incantations are useful
enough that they deserve their own anchor.

I don't know about that. It is not clear to me that that *is* actually
so useful or commonplace, or a complete solution to the underlying
problem that it is worthy for taking a escape.

FWIW, I note that the reporter of #127436 (which was rejected because
the behaviour is as documented) seemed to expect \b to mean "not
between two \w characters".

That said, I don't feel in a position to judge how commonplace this need is.

--
Aaron Crane ** http​://aaroncrane.co.uk/

@p5pRT
Copy link
Author

p5pRT commented Mar 13, 2016

From @epa

That said, I don't feel in a position to judge how commonplace this need is.

The way I see it, it is the current behaviour of \b which is quite unusual and unlikely to be needed.
If \y matches anywhere except between two word characters, then most of the common uses of \b can also be done with \y, as

  /\yhello\y/

and there are also the more subtle uses where the regexp is not known in advance, or doesn't end in a word character (as #127436 which you mentioned), which can be handled correctly with \y but are difficult to do or buggy with \b.

In other words, to turn it the other way around, if perl5 already had a \y anchor and somebody proposed adding \b with its current semantics, I think it would be judged not commonly used enough to be worth adding.

Of course that doesn't decide the issue of where to go from here, since \b is already well established, but it can be another way of looking at the question.

\b{wb}, on the other hand, does do what you want in most situations so perhaps it can take most of the work of the proposed \y. One question is whether all the Unicode stuff it does will slow down matching in the ASCII-only or 8-bit-only case.

This email is intended only for the person to whom it is addressed and may contain confidential information. Any retransmission, copying, disclosure or other use of, this information by persons other than the intended recipient is prohibited. If you received this email in error, please contact the sender and delete the material. This email is for information only and is not intended as an offer or solicitation for the purchase or sale of any financial instrument. Wadhwani Asset Management LLP is a Limited Liability Partnership registered in England (OC303168) with registered office at 40 Berkeley Square, 3rd Floor, London, W1J 5AL. It is authorised and regulated by the Financial Conduct Authority.

@p5pRT
Copy link
Author

p5pRT commented Mar 13, 2016

From @demerphq

On 13 March 2016 at 21​:07, Ed Avis <eda@​waniasset.com> wrote​:

That said, I don't feel in a position to judge how commonplace this need is.

The way I see it, it is the current behaviour of \b which is quite unusual and unlikely to be needed.
If \y matches anywhere except between two word characters, then most of the common uses of \b can also be done with \y, as

/\\yhello\\y/

and there are also the more subtle uses where the regexp is not known in advance, or doesn't end in a word character (as #127436 which you mentioned), which can be handled correctly with \y but are difficult to do or buggy with \b.

In other words, to turn it the other way around, if perl5 already had a \y anchor and somebody proposed adding \b with its current semantics, I think it would be judged not commonly used enough to be worth adding.

Of course that doesn't decide the issue of where to go from here, since \b is already well established, but it can be another way of looking at the question.

\b{wb}, on the other hand, does do what you want in most situations so perhaps it can take most of the work of the proposed \y. One question is whether all the Unicode stuff it does will slow down matching in the ASCII-only or 8-bit-only case.

Just curious, what does Larry say about this in regard to Perl6?

Yves

@p5pRT
Copy link
Author

p5pRT commented Mar 17, 2016

From @epa

demerphq <demerphq <at> gmail.com> writes​:

Just curious, what does Larry say about this in regard to Perl6?

I don't know Perl 6 but this is what I found​:

<< matches a left word boundary​: it matches positions where there is a
non-word character at the left (or the start of the string) and a word
character to the right.

matches a right word boundary​: it matches positions where there is a word
character at the left and a non-word character at the right (or the end of
the string).

From the sound of it, this reproduces the problem with \b, in that you cannot
have

  /<<$pattern>>/

and get 'whole word' matching that works for patterns like /hello3/ or /123/.
In fact, /<<hello3>>/ would never match.

--
Ed Avis <eda@​waniasset.com>

@p5pRT
Copy link
Author

p5pRT commented Mar 17, 2016

From @Abigail

On Sun, Mar 13, 2016 at 08​:07​:34PM +0000, Ed Avis wrote​:

That said, I don't feel in a position to judge how commonplace this need is.

The way I see it, it is the current behaviour of \b which is quite unusual and unlikely to be needed.
If \y matches anywhere except between two word characters, then most of the common uses of \b can also be done with \y, as

/\\yhello\\y/

and there are also the more subtle uses where the regexp is not known in advance, or doesn't end in a word character (as #127436 which you mentioned), which can be handled correctly with \y but are difficult to do or buggy with \b.

In other words, to turn it the other way around, if perl5 already had a \y anchor and somebody proposed adding \b with its current semantics, I think it would be judged not commonly used enough to be worth adding.

Of course that doesn't decide the issue of where to go from here, since \b is already well established, but it can be another way of looking at the question.

\b{wb}, on the other hand, does do what you want in most situations so perhaps it can take most of the work of the proposed \y. One question is whether all the Unicode stuff it does will slow down matching in the ASCII-only or 8-bit-only case.

I feel "not between word-characters" is a bit specific. Next there will
be some making a case for "not between non-word-characters",
"not between Latin-characters", "not between non-Greek-characters", etc.

If this were implemented, I'd rather see someway of taking an argument
indicating a class of characters between which the construct should
match/not-match.

For instance​:

  \y{w} # Match between word characters
  \Y{w} # Match unless between word characters
  \y{W} # Match between non-word characters
  \Y{W} # Match unless between non-word characters
  \y{ASCII} # Match between two ASCII characters
  \Y{IsGreek} # Match unless between two Greek letters
  \y{[13579]} # Match between odd digits

etc.

Abigail

@p5pRT
Copy link
Author

p5pRT commented Mar 17, 2016

From @demerphq

On 17 March 2016 at 17​:29, Abigail <abigail@​abigail.be> wrote​:

On Sun, Mar 13, 2016 at 08​:07​:34PM +0000, Ed Avis wrote​:

That said, I don't feel in a position to judge how commonplace this need is.

The way I see it, it is the current behaviour of \b which is quite unusual and unlikely to be needed.
If \y matches anywhere except between two word characters, then most of the common uses of \b can also be done with \y, as

/\\yhello\\y/

and there are also the more subtle uses where the regexp is not known in advance, or doesn't end in a word character (as #127436 which you mentioned), which can be handled correctly with \y but are difficult to do or buggy with \b.

In other words, to turn it the other way around, if perl5 already had a \y anchor and somebody proposed adding \b with its current semantics, I think it would be judged not commonly used enough to be worth adding.

Of course that doesn't decide the issue of where to go from here, since \b is already well established, but it can be another way of looking at the question.

\b{wb}, on the other hand, does do what you want in most situations so perhaps it can take most of the work of the proposed \y. One question is whether all the Unicode stuff it does will slow down matching in the ASCII-only or 8-bit-only case.

I feel "not between word-characters" is a bit specific. Next there will
be some making a case for "not between non-word-characters",
"not between Latin-characters", "not between non-Greek-characters", etc.

If this were implemented, I'd rather see someway of taking an argument
indicating a class of characters between which the construct should
match/not-match.

For instance​:

\\y\{w\}       \# Match between word characters
\\Y\{w\}       \# Match unless between word characters
\\y\{W\}       \# Match between non\-word characters
\\Y\{W\}       \# Match unless between non\-word characters
\\y\{ASCII\}   \# Match between two ASCII characters
\\Y\{IsGreek\} \# Match unless between two Greek letters
\\y\{\[13579\]\} \# Match between odd digits

If it was \y{PAT} then we could make it turn into

(?(?=\w)(?<!\w))

(or one of various other possible implementations of this)

So instead of being \y{w} it would be \y{\w}. Which might not be too
hard to do, and would mean we wouldnt need to invent a new language
for the insides of the braces. It would of course mean you could do
ridiculous things like \y{FOO}, although I guess we could restrict it
to ops that match one character.

But again, is \y{} worth this? You could do​:

my $y= qr/
(?(DEFINE)
  (?<y>
  (?(?=\w)(?<!\w))
  )
)
/x;

/(&y)foo(&y)$y/

And we don't need to burn the \y.

Anyway, im fine with looking into an implementation of this, but I do
wonder if its good use of one the few remaining escape chars. Id like
to hear more people saying that they think its a good idea before i go
there.

Yves

--
perl -Mre=debug -e "/just|another|perl|hacker/"

@p5pRT
Copy link
Author

p5pRT commented Mar 18, 2016

From gm@cruft.de

From the keyboard of demerphq [17.03.16,19​:08]​:
[...]

.............................. It would of course mean you could do
ridiculous things like \y{FOO}, although I guess we could restrict it
to ops that match one character.

Note that "\x{F00}" is the holy syllable OM in tibetan writing. There
must have been some grim humour among the unicode board folks - which,
of course, doen't make a point for \y{FOO}.

SCNR,
0--gg-

--
_($_=" "x(1<<5)."?\n".q·/)Oo. G°\ /
  /\_¯/(q /
---------------------------- \__(m.====·.(_("always off the crowd"))."·
");sub _{s./.($e="'Itrs `mnsgdq Gdbj O`qkdq")=~y/"-y/#-z/;$e.e && print}

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

No branches or pull requests

2 participants