I try to follow what LanX does with the REPL. I'm confused right now.

$ perl -de1 Loading DB routines from perl5db.pl version 1.53 Editor support available. Enter h or 'h h' for help, or 'man perldebug' for more help. main::(-e:1): 1 DB<1> $str = '\\x{A3f4}' + DB<2> p $str + \x{A3f4}

Ok, so we begin the game with a string that has 2 backslashes before an x and then curly braces containing a value. We ask the debugger to print the value, and the output differs from the original string by having one fewer backslash.

Q1) What makes you think this is a left-curly brace? I don't doubt you; I just can't get there:

DB<2> print $str + \x{A3f4} DB<3> print "$str" + \x{A3f4}

Q2) What is \x{value} called? I'm going up a wall trying to disambiguate it. I think it's completely-different from my \x experience with it in a regex: perlre#/x-and-/xx. Continuing:

DB<3> if ( $str =~ /(\\x{[A-F\d]+})/i ) { print $1 } + Unescaped left brace in regex is deprecated here (and will be fatal in + Perl 5.30), passed through in regex; marked by <-- HERE in m/(\\x{ < +-- HERE [A-F\d]+})/ at (eval 13)[/usr/share/perl/5.28/perl5db.pl:738] + line 2.

Ok, let's stop here. When I'm debugging my stuff, I typically think that the first error message is the one I need to attend to. What follows was the stack of things that bombed out because of the first error. This is as clear as an error message is, except that I'm not quite sure where it stops and the next one begins. Let's take a look at the rest of the message:

at (eval 13)[/usr/share/perl/5.28/perl5db.pl:738] line 2. eval 'no strict; ($@, $!, $^E, $,, $/, $\\, $^W) = @DB::saved;pack +age main; $^D = $^D | $DB::db_stop; if ( $str =~ /(\\\\x{[A-F\\d]+})/i ) { print $1 }; ' called at /usr/share/perl/5.28/perl5db.pl line 738 DB::eval called at /usr/share/perl/5.28/perl5db.pl line 3138 DB::DB called at -e line 1 Unescaped left brace in regex is deprecated here (and will be fatal in + Perl 5.30), passed through in regex; marked by <-- HERE in m/(\\x{ < +-- HERE [A-F\d]+})/ at (eval 13)[/usr/share/perl/5.28/perl5db.pl:738] + line 2. at (eval 13)[/usr/share/perl/5.28/perl5db.pl:738] line 2. eval 'no strict; ($@, $!, $^E, $,, $/, $\\, $^W) = @DB::saved;pack +age main; $^D = $^D | $DB::db_stop; if ( $str =~ /(\\\\x{[A-F\\d]+})/i ) { print $1 }; ' called at /usr/share/perl/5.28/perl5db.pl line 738 DB::eval called at /usr/share/perl/5.28/perl5db.pl line 3138 DB::DB called at -e line 1 Unescaped left brace in regex is deprecated here (and will be fatal in + Perl 5.30), passed through in regex; marked by <-- HERE in m/(\\x{ < +-- HERE [A-F\d]+})/ at (eval 13)[/usr/share/perl/5.28/perl5db.pl:738] + line 2. at (eval 13)[/usr/share/perl/5.28/perl5db.pl:738] line 2. eval 'no strict; ($@, $!, $^E, $,, $/, $\\, $^W) = @DB::saved;pack +age main; $^D = $^D | $DB::db_stop; if ( $str =~ /(\\\\x{[A-F\\d]+})/i ) { print $1 }; ' called at /usr/share/perl/5.28/perl5db.pl line 738 DB::eval called at /usr/share/perl/5.28/perl5db.pl line 3138 DB::DB called at -e line 1 \x{A3f4}

Can you "see" the layering of this, because I cannot. Q3) Is there a setting for the debugger that allows for more human readable error output, maybe a newline between layers?

Q4) Why is any part of perl5db.pl asking itself this question:

eval 'no strict; ($@, $!, $^E, $,, $/, $\\, $^W) = @DB::saved;package +main; $^D = $^D | $DB::db_stop; if ( $str =~ /(\\\\x{[A-F\\d]+})/i ) { print $1 };

There are 4 backslashes before that x. I know this is a situation of garbage in, but how is this the garbage out?

DB<5> $str = '123X12' + DB<6> p $str + 123X12 DB<7> if ( $str =~ /^(\d{2,4})[^\d](\d{2})/) { print "$1;$2" } + 123;12 DB<8> $str = '123{12' + DB<9> if ( $str =~ /^(\d{2,4})[^\d](\d{2})/) { print "$1;$2" } + 123;12

Well, the rest of this makes sense to me, and it shows a use of the curly braces that I might know. I wouldn't understand it without working through it with the REPL. One final question:

Q5) Is it said correctly that perl is written in c, but the perl debugger is written in perl?

Gruss aus Amiland


In reply to Re^4: Unescaped left brace in regex is passed through in regex by Aldebaran
in thread Unescaped left brace in regex is passed through in regex by gzh

Title:
Use:  <p> text here (a paragraph) </p>
and:  <code> code here </code>
to format your post, it's "PerlMonks-approved HTML":



  • Posts are HTML formatted. Put <p> </p> tags around your paragraphs. Put <code> </code> tags around your code and data!
  • Titles consisting of a single word are discouraged, and in most cases are disallowed outright.
  • Read Where should I post X? if you're not absolutely sure you're posting in the right place.
  • Please read these before you post! —
  • Posts may use any of the Perl Monks Approved HTML tags:
    a, abbr, b, big, blockquote, br, caption, center, col, colgroup, dd, del, details, div, dl, dt, em, font, h1, h2, h3, h4, h5, h6, hr, i, ins, li, ol, p, pre, readmore, small, span, spoiler, strike, strong, sub, summary, sup, table, tbody, td, tfoot, th, thead, tr, tt, u, ul, wbr
  • You may need to use entities for some characters, as follows. (Exception: Within code tags, you can put the characters literally.)
            For:     Use:
    & &amp;
    < &lt;
    > &gt;
    [ &#91;
    ] &#93;
  • Link using PerlMonks shortcuts! What shortcuts can I use for linking?
  • See Writeup Formatting Tips and other pages linked from there for more info.