Hello community,

here is the log from the commit of package perl-PPIx-QuoteLike for 
openSUSE:Factory checked in at 2019-06-04 12:10:55
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/perl-PPIx-QuoteLike (Old)
 and      /work/SRC/openSUSE:Factory/.perl-PPIx-QuoteLike.new.5148 (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Package is "perl-PPIx-QuoteLike"

Tue Jun  4 12:10:55 2019 rev:2 rq:707038 version:0.007

Changes:
--------
--- /work/SRC/openSUSE:Factory/perl-PPIx-QuoteLike/perl-PPIx-QuoteLike.changes  
2019-04-05 11:55:32.138286484 +0200
+++ 
/work/SRC/openSUSE:Factory/.perl-PPIx-QuoteLike.new.5148/perl-PPIx-QuoteLike.changes
        2019-06-04 12:11:00.671847895 +0200
@@ -1,0 +2,17 @@
+Sat Jun  1 05:17:18 UTC 2019 - Stephan Kulow <[email protected]>
+
+- updated to 0.007
+   see /usr/share/doc/packages/perl-PPIx-QuoteLike/Changes
+
+  0.007                2019-05-31      T. R. Wyant
+      Prohibit interpolation inside \N{...}.
+  
+      Fix error message in eg/pqldump
+  
+      Allow PPIx::QuoteLike::Utils::__variables() to take a PPI::Element
+      (rather than PPI::Node), PPIx::Regexp::Element, PPIx::QuoteLike, or
+      PPIx::QuoteLike::Token.
+  
+      Add eg/variables
+
+-------------------------------------------------------------------

Old:
----
  PPIx-QuoteLike-0.006.tar.gz

New:
----
  PPIx-QuoteLike-0.007.tar.gz
  cpanspec.yml

++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Other differences:
------------------
++++++ perl-PPIx-QuoteLike.spec ++++++
--- /var/tmp/diff_new_pack.F56wmh/_old  2019-06-04 12:11:01.303847688 +0200
+++ /var/tmp/diff_new_pack.F56wmh/_new  2019-06-04 12:11:01.307847686 +0200
@@ -17,7 +17,7 @@
 
 
 Name:           perl-PPIx-QuoteLike
-Version:        0.006
+Version:        0.007
 Release:        0
 %define cpan_name PPIx-QuoteLike
 Summary:        Parse Perl string literals and string-literal-like things
@@ -25,6 +25,7 @@
 Group:          Development/Libraries/Perl
 Url:            https://metacpan.org/release/%{cpan_name}
 Source0:        
https://cpan.metacpan.org/authors/id/W/WY/WYANT/%{cpan_name}-%{version}.tar.gz
+Source1:        cpanspec.yml
 BuildArch:      noarch
 BuildRoot:      %{_tmppath}/%{name}-%{version}-build
 BuildRequires:  perl

++++++ PPIx-QuoteLike-0.006.tar.gz -> PPIx-QuoteLike-0.007.tar.gz ++++++
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/PPIx-QuoteLike-0.006/Changes 
new/PPIx-QuoteLike-0.007/Changes
--- old/PPIx-QuoteLike-0.006/Changes    2018-07-09 16:30:41.000000000 +0200
+++ new/PPIx-QuoteLike-0.007/Changes    2019-05-31 17:09:10.000000000 +0200
@@ -1,3 +1,14 @@
+0.007          2019-05-31      T. R. Wyant
+    Prohibit interpolation inside \N{...}.
+
+    Fix error message in eg/pqldump
+
+    Allow PPIx::QuoteLike::Utils::__variables() to take a PPI::Element
+    (rather than PPI::Node), PPIx::Regexp::Element, PPIx::QuoteLike, or
+    PPIx::QuoteLike::Token.
+
+    Add eg/variables
+
 0.006          2018-07-09      T. R. Wyant
     Only standalone graphemes and non-characters allowed as delimiters
     starting with Perl 5.29.0.
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/PPIx-QuoteLike-0.006/MANIFEST 
new/PPIx-QuoteLike-0.007/MANIFEST
--- old/PPIx-QuoteLike-0.006/MANIFEST   2018-07-09 16:30:41.000000000 +0200
+++ new/PPIx-QuoteLike-0.007/MANIFEST   2019-05-31 17:09:10.000000000 +0200
@@ -1,6 +1,8 @@
 Build.PL
 Changes
+eg/README
 eg/pqldump
+eg/variables
 inc/My/Module/Build.pm
 inc/My/Module/Meta.pm
 inc/My/Module/Recommend.pm
@@ -25,6 +27,7 @@
 t/basic.t
 t/dump.t
 t/parse.t
+t/variables.t
 t/version.t
 xt/author/carp_not.t
 xt/author/changes.t
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/PPIx-QuoteLike-0.006/META.json 
new/PPIx-QuoteLike-0.007/META.json
--- old/PPIx-QuoteLike-0.006/META.json  2018-07-09 16:30:41.000000000 +0200
+++ new/PPIx-QuoteLike-0.007/META.json  2019-05-31 17:09:10.000000000 +0200
@@ -4,7 +4,7 @@
       "Thomas R. Wyant, III F<wyant at cpan dot org>"
    ],
    "dynamic_config" : 1,
-   "generated_by" : "Module::Build version 0.4224",
+   "generated_by" : "Module::Build version 0.4229",
    "license" : [
       "perl_5"
    ],
@@ -46,51 +46,51 @@
    "provides" : {
       "PPIx::QuoteLike" : {
          "file" : "lib/PPIx/QuoteLike.pm",
-         "version" : "0.006"
+         "version" : "0.007"
       },
       "PPIx::QuoteLike::Constant" : {
          "file" : "lib/PPIx/QuoteLike/Constant.pm",
-         "version" : "0.006"
+         "version" : "0.007"
       },
       "PPIx::QuoteLike::Dumper" : {
          "file" : "lib/PPIx/QuoteLike/Dumper.pm",
-         "version" : "0.006"
+         "version" : "0.007"
       },
       "PPIx::QuoteLike::Token" : {
          "file" : "lib/PPIx/QuoteLike/Token.pm",
-         "version" : "0.006"
+         "version" : "0.007"
       },
       "PPIx::QuoteLike::Token::Control" : {
          "file" : "lib/PPIx/QuoteLike/Token/Control.pm",
-         "version" : "0.006"
+         "version" : "0.007"
       },
       "PPIx::QuoteLike::Token::Delimiter" : {
          "file" : "lib/PPIx/QuoteLike/Token/Delimiter.pm",
-         "version" : "0.006"
+         "version" : "0.007"
       },
       "PPIx::QuoteLike::Token::Interpolation" : {
          "file" : "lib/PPIx/QuoteLike/Token/Interpolation.pm",
-         "version" : "0.006"
+         "version" : "0.007"
       },
       "PPIx::QuoteLike::Token::String" : {
          "file" : "lib/PPIx/QuoteLike/Token/String.pm",
-         "version" : "0.006"
+         "version" : "0.007"
       },
       "PPIx::QuoteLike::Token::Structure" : {
          "file" : "lib/PPIx/QuoteLike/Token/Structure.pm",
-         "version" : "0.006"
+         "version" : "0.007"
       },
       "PPIx::QuoteLike::Token::Unknown" : {
          "file" : "lib/PPIx/QuoteLike/Token/Unknown.pm",
-         "version" : "0.006"
+         "version" : "0.007"
       },
       "PPIx::QuoteLike::Token::Whitespace" : {
          "file" : "lib/PPIx/QuoteLike/Token/Whitespace.pm",
-         "version" : "0.006"
+         "version" : "0.007"
       },
       "PPIx::QuoteLike::Utils" : {
          "file" : "lib/PPIx/QuoteLike/Utils.pm",
-         "version" : "0.006"
+         "version" : "0.007"
       }
    },
    "release_status" : "stable",
@@ -108,6 +108,6 @@
          "web" : "https://github.com/trwyant/perl-PPIx-QuoteLike";
       }
    },
-   "version" : "0.006",
-   "x_serialization_backend" : "JSON::PP version 2.97001"
+   "version" : "0.007",
+   "x_serialization_backend" : "JSON::PP version 4.02"
 }
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/PPIx-QuoteLike-0.006/META.yml 
new/PPIx-QuoteLike-0.007/META.yml
--- old/PPIx-QuoteLike-0.006/META.yml   2018-07-09 16:30:41.000000000 +0200
+++ new/PPIx-QuoteLike-0.007/META.yml   2019-05-31 17:09:10.000000000 +0200
@@ -5,7 +5,7 @@
 build_requires:
   Test::More: '0.88'
 dynamic_config: 1
-generated_by: 'Module::Build version 0.4224, CPAN::Meta::Converter version 
2.150010'
+generated_by: 'Module::Build version 0.4229, CPAN::Meta::Converter version 
2.150010'
 license: perl
 meta-spec:
   url: http://module-build.sourceforge.net/META-spec-v1.4.html
@@ -19,40 +19,40 @@
 provides:
   PPIx::QuoteLike:
     file: lib/PPIx/QuoteLike.pm
-    version: '0.006'
+    version: '0.007'
   PPIx::QuoteLike::Constant:
     file: lib/PPIx/QuoteLike/Constant.pm
-    version: '0.006'
+    version: '0.007'
   PPIx::QuoteLike::Dumper:
     file: lib/PPIx/QuoteLike/Dumper.pm
-    version: '0.006'
+    version: '0.007'
   PPIx::QuoteLike::Token:
     file: lib/PPIx/QuoteLike/Token.pm
-    version: '0.006'
+    version: '0.007'
   PPIx::QuoteLike::Token::Control:
     file: lib/PPIx/QuoteLike/Token/Control.pm
-    version: '0.006'
+    version: '0.007'
   PPIx::QuoteLike::Token::Delimiter:
     file: lib/PPIx/QuoteLike/Token/Delimiter.pm
-    version: '0.006'
+    version: '0.007'
   PPIx::QuoteLike::Token::Interpolation:
     file: lib/PPIx/QuoteLike/Token/Interpolation.pm
-    version: '0.006'
+    version: '0.007'
   PPIx::QuoteLike::Token::String:
     file: lib/PPIx/QuoteLike/Token/String.pm
-    version: '0.006'
+    version: '0.007'
   PPIx::QuoteLike::Token::Structure:
     file: lib/PPIx/QuoteLike/Token/Structure.pm
-    version: '0.006'
+    version: '0.007'
   PPIx::QuoteLike::Token::Unknown:
     file: lib/PPIx/QuoteLike/Token/Unknown.pm
-    version: '0.006'
+    version: '0.007'
   PPIx::QuoteLike::Token::Whitespace:
     file: lib/PPIx/QuoteLike/Token/Whitespace.pm
-    version: '0.006'
+    version: '0.007'
   PPIx::QuoteLike::Utils:
     file: lib/PPIx/QuoteLike/Utils.pm
-    version: '0.006'
+    version: '0.007'
 requires:
   Carp: '0'
   Encode: '0'
@@ -70,5 +70,5 @@
   bugtracker: https://rt.cpan.org/Public/Dist/Display.html?Name=PPIx-QuoteLike
   license: http://dev.perl.org/licenses/
   repository: git://github.com/trwyant/perl-PPIx-QuoteLike.git
-version: '0.006'
+version: '0.007'
 x_serialization_backend: 'CPAN::Meta::YAML version 0.018'
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/PPIx-QuoteLike-0.006/README 
new/PPIx-QuoteLike-0.007/README
--- old/PPIx-QuoteLike-0.006/README     2018-07-09 16:30:41.000000000 +0200
+++ new/PPIx-QuoteLike-0.007/README     2019-05-31 17:09:10.000000000 +0200
@@ -1,4 +1,4 @@
-PPIx-QuoteLike is Copyright (C) 2016-2018 by Thomas R. Wyant, III
+PPIx-QuoteLike is Copyright (C) 2016-2019 by Thomas R. Wyant, III
 
 DESCRIPTION
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/PPIx-QuoteLike-0.006/eg/README 
new/PPIx-QuoteLike-0.007/eg/README
--- old/PPIx-QuoteLike-0.006/eg/README  1970-01-01 01:00:00.000000000 +0100
+++ new/PPIx-QuoteLike-0.007/eg/README  2019-05-31 17:09:10.000000000 +0200
@@ -0,0 +1,21 @@
+This directory contains sample Perl scripts that make use of the
+PPIx::QuoteLike modules. Specifically it contains:
+
+README
+    This file
+
+pqldump
+    This script dumps quotelike things from its argument, which can be
+    either the name of a Perl file or a literal string. In the former
+    case the file is run through PPI::Document and anything looking like
+    a string is dumped. In the latter case the content of the argument
+    is dumped. Regular expressions are not dumped by this script; see
+    eg/predump in the PPIx-Regexp distribution for that.
+
+variables
+    This script lists all variables used by the file or literal Perl
+    code given in its argument. Variables will be found in regular
+    expressions only if PPIx::Regexp can be loaded.
+
+
+# ex: set filetype=text textwidth=72 autoindent :
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/PPIx-QuoteLike-0.006/eg/pqldump 
new/PPIx-QuoteLike-0.007/eg/pqldump
--- old/PPIx-QuoteLike-0.006/eg/pqldump 2018-07-09 16:30:41.000000000 +0200
+++ new/PPIx-QuoteLike-0.007/eg/pqldump 2019-05-31 17:09:10.000000000 +0200
@@ -9,7 +9,7 @@
 use Pod::Usage;
 use PPIx::QuoteLike::Dumper;
 
-our $VERSION = '0.006';
+our $VERSION = '0.007';
 
 my %opt;
 
@@ -36,7 +36,7 @@
 
 foreach my $arg ( @ARGV ) {
     print PPIx::QuoteLike::Dumper->dump( $arg, @dumper_arg,
-       none => "$arg not recognized by PPIx::Regexp" );
+       none => "$arg not recognized by PPIx::QuoteLike" );
 }
 
 __END__
@@ -148,7 +148,7 @@
 
 =head1 COPYRIGHT AND LICENSE
 
-Copyright (C) 2016-2018 by Thomas R. Wyant, III
+Copyright (C) 2016-2019 by Thomas R. Wyant, III
 
 This program is free software; you can redistribute it and/or modify it
 under the same terms as Perl 5.10.0. For more details, see the full text
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/PPIx-QuoteLike-0.006/eg/variables 
new/PPIx-QuoteLike-0.007/eg/variables
--- old/PPIx-QuoteLike-0.006/eg/variables       1970-01-01 01:00:00.000000000 
+0100
+++ new/PPIx-QuoteLike-0.007/eg/variables       2019-05-31 17:09:10.000000000 
+0200
@@ -0,0 +1,93 @@
+#!/usr/bin/env perl
+
+use 5.006;
+
+use strict;
+use warnings;
+
+use Getopt::Long 2.33 qw{ :config auto_version };
+use Pod::Usage;
+use PPI::Document;
+use PPIx::QuoteLike::Utils qw{ __variables };
+
+our $VERSION = '0.007';
+
+my %opt;
+
+GetOptions( \%opt,
+    help => sub { pod2usage( { -verbose => 2 } ) },
+) and @ARGV == 1 or pod2usage( { -verbose => 0 } );
+
+my $doc = PPI::Document->new( -e $ARGV[0] ? $ARGV[0] : \$ARGV[0] );
+{
+    local $\ = "\n";
+    print for map { $_->[0] }
+       sort { $a->[2] cmp $b->[2] || $a->[1] cmp $b->[1] }
+       map { [ $_, substr( $_, 0, 1 ), substr( $_, 1 ) ] }
+       __variables( $doc );
+}
+
+__END__
+
+=head1 TITLE
+
+variables - List the variables in a chunk of Perl
+
+=head1 SYNOPSIS
+
+ variables eg/variables
+ variables 'qr/foo$bar/smx'
+ variables -help
+ variables -version
+
+=head1 OPTIONS
+
+=head2 -help
+
+This option displays the documentation for this script. The script then
+exits.
+
+=head2 -version
+
+This option displays the version of this script. The script then exits.
+
+=head1 DETAILS
+
+This Perl script lists the variables in the chunk of Perl specified as
+the only command argument. This can be either the name of a file or
+literal Perl code; the choice is a pragmatic one based on whether a file
+by the given name actually exists.
+
+The output is in alphabetical order by variable name, and within
+variable name by sigil. In the case of subscripted variables, the sigil
+displayed will be that of the underlying variable. That is, if
+C<$foo[0]> appears, C<@foo> will be displayed.
+
+This script will find variables appearing in the code, and variables
+interpolated into strings. If L<PPIx::Regexp|PPIx::Regexp> can be
+loaded, variables interpolated into regular expressions will also be
+found.
+
+The heavy lifting is done by
+L<PPIx::QuoteLike::Utils|PPIx::QuoteLike::Utils> subroutine
+L<__variables()|PPIx::QuoteLike::Utils/__variables>.
+
+=head1 AUTHOR
+
+Thomas R. Wyant, III F<wyant at cpan dot org>
+
+=head1 COPYRIGHT AND LICENSE
+
+Copyright (C) 2019 by Thomas R. Wyant, III
+
+This program is free software; you can redistribute it and/or modify it
+under the same terms as Perl 5.10.0. For more details, see the full text
+of the licenses in the directory LICENSES.
+
+This program is distributed in the hope that it will be useful, but
+without any warranty; without even the implied warranty of
+merchantability or fitness for a particular purpose.
+
+=cut
+
+# ex: set textwidth=72 :
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/PPIx-QuoteLike-0.006/inc/My/Module/Build.pm 
new/PPIx-QuoteLike-0.007/inc/My/Module/Build.pm
--- old/PPIx-QuoteLike-0.006/inc/My/Module/Build.pm     2018-07-09 
16:30:41.000000000 +0200
+++ new/PPIx-QuoteLike-0.007/inc/My/Module/Build.pm     2019-05-31 
17:09:10.000000000 +0200
@@ -85,7 +85,7 @@
 
 =head1 COPYRIGHT AND LICENSE
 
-Copyright (C) 2016-2018 by Thomas R. Wyant, III
+Copyright (C) 2016-2019 by Thomas R. Wyant, III
 
 This program is free software; you can redistribute it and/or modify it
 under the same terms as Perl 5.10.0. For more details, see the full text
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/PPIx-QuoteLike-0.006/inc/My/Module/Meta.pm 
new/PPIx-QuoteLike-0.007/inc/My/Module/Meta.pm
--- old/PPIx-QuoteLike-0.006/inc/My/Module/Meta.pm      2018-07-09 
16:30:41.000000000 +0200
+++ new/PPIx-QuoteLike-0.007/inc/My/Module/Meta.pm      2019-05-31 
17:09:10.000000000 +0200
@@ -174,7 +174,7 @@
 
 =head1 COPYRIGHT AND LICENSE
 
-Copyright (C) 2016-2018 by Thomas R. Wyant, III
+Copyright (C) 2016-2019 by Thomas R. Wyant, III
 
 This program is free software; you can redistribute it and/or modify it
 under the same terms as Perl 5.10.0. For more details, see the full text
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/PPIx-QuoteLike-0.006/inc/My/Module/Recommend/Any.pm 
new/PPIx-QuoteLike-0.007/inc/My/Module/Recommend/Any.pm
--- old/PPIx-QuoteLike-0.006/inc/My/Module/Recommend/Any.pm     2018-07-09 
16:30:41.000000000 +0200
+++ new/PPIx-QuoteLike-0.007/inc/My/Module/Recommend/Any.pm     2019-05-31 
17:09:10.000000000 +0200
@@ -12,7 +12,7 @@
 BEGIN {
     *import    = \&Exporter::import;
 }
-our $VERSION = '0.006';
+our $VERSION = '0.007';
 
 our @EXPORT_OK = qw{ __any };
 
@@ -156,7 +156,7 @@
 
 =head1 COPYRIGHT AND LICENSE
 
-Copyright (C) 2016-2018 by Thomas R. Wyant, III
+Copyright (C) 2016-2019 by Thomas R. Wyant, III
 
 This program is free software; you can redistribute it and/or modify it
 under the same terms as Perl 5.10.0. For more details, see the full text
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/PPIx-QuoteLike-0.006/inc/My/Module/Recommend.pm 
new/PPIx-QuoteLike-0.007/inc/My/Module/Recommend.pm
--- old/PPIx-QuoteLike-0.006/inc/My/Module/Recommend.pm 2018-07-09 
16:30:41.000000000 +0200
+++ new/PPIx-QuoteLike-0.007/inc/My/Module/Recommend.pm 2019-05-31 
17:09:10.000000000 +0200
@@ -163,7 +163,7 @@
 
 =head1 COPYRIGHT AND LICENSE
 
-Copyright (C) 2014-2018 by Thomas R. Wyant, III
+Copyright (C) 2014-2019 by Thomas R. Wyant, III
 
 This program is free software; you can redistribute it and/or modify it
 under the same terms as Perl 5.10.0. For more details, see the full text
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/PPIx-QuoteLike-0.006/lib/PPIx/QuoteLike/Constant.pm 
new/PPIx-QuoteLike-0.007/lib/PPIx/QuoteLike/Constant.pm
--- old/PPIx-QuoteLike-0.006/lib/PPIx/QuoteLike/Constant.pm     2018-07-09 
16:30:41.000000000 +0200
+++ new/PPIx-QuoteLike-0.007/lib/PPIx/QuoteLike/Constant.pm     2019-05-31 
17:09:10.000000000 +0200
@@ -8,7 +8,7 @@
 use Carp;
 use base qw{ Exporter };
 
-our $VERSION = '0.006';
+our $VERSION = '0.007';
 
 our @CARP_NOT = qw{
     PPIx::QuoteLike
@@ -27,11 +27,22 @@
 
 our @EXPORT_OK = qw{
     MINIMUM_PERL
+    HAVE_PPIX_REGEXP
     SUFFICIENT_UTF8_SUPPORT_FOR_WEIRD_DELIMITERS
     VARIABLE_RE
     @CARP_NOT
 };
 
+# We can't depend on PPIx::Regexp without getting into a circular
+# dependency. I think. But we can sure use it if we can come by it.
+use constant HAVE_PPIX_REGEXP  => do {
+    local $@ = undef;
+    eval {     ## no critic (RequireCheckingReturnValueOfEval)
+       require PPIx::Regexp;
+       1;
+    };
+};
+
 use constant MINIMUM_PERL      => '5.000';
 
 use constant SUFFICIENT_UTF8_SUPPORT_FOR_WEIRD_DELIMITERS => $] ge '5.008003';
@@ -110,7 +121,7 @@
 
 =head1 COPYRIGHT AND LICENSE
 
-Copyright (C) 2016-2018 by Thomas R. Wyant, III
+Copyright (C) 2016-2019 by Thomas R. Wyant, III
 
 This program is free software; you can redistribute it and/or modify it
 under the same terms as Perl 5.10.0. For more details, see the full text
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/PPIx-QuoteLike-0.006/lib/PPIx/QuoteLike/Dumper.pm 
new/PPIx-QuoteLike-0.007/lib/PPIx/QuoteLike/Dumper.pm
--- old/PPIx-QuoteLike-0.006/lib/PPIx/QuoteLike/Dumper.pm       2018-07-09 
16:30:41.000000000 +0200
+++ new/PPIx-QuoteLike-0.007/lib/PPIx/QuoteLike/Dumper.pm       2019-05-31 
17:09:10.000000000 +0200
@@ -12,7 +12,7 @@
 use PPIx::QuoteLike::Constant qw{ @CARP_NOT };
 use Scalar::Util ();
 
-our $VERSION = '0.006';
+our $VERSION = '0.007';
 
 use constant SCALAR_REF        => ref \0;
 
@@ -482,7 +482,7 @@
 
 =head1 COPYRIGHT AND LICENSE
 
-Copyright (C) 2016-2018 by Thomas R. Wyant, III
+Copyright (C) 2016-2019 by Thomas R. Wyant, III
 
 This program is free software; you can redistribute it and/or modify it
 under the same terms as Perl 5.10.0. For more details, see the full text
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/PPIx-QuoteLike-0.006/lib/PPIx/QuoteLike/Token/Control.pm 
new/PPIx-QuoteLike-0.007/lib/PPIx/QuoteLike/Token/Control.pm
--- old/PPIx-QuoteLike-0.006/lib/PPIx/QuoteLike/Token/Control.pm        
2018-07-09 16:30:41.000000000 +0200
+++ new/PPIx-QuoteLike-0.007/lib/PPIx/QuoteLike/Token/Control.pm        
2019-05-31 17:09:10.000000000 +0200
@@ -9,7 +9,7 @@
 
 use PPIx::QuoteLike::Constant qw{ @CARP_NOT };
 
-our $VERSION = '0.006';
+our $VERSION = '0.007';
 
 {
     # TODO make this a state variable when we can require Perl 5.10.
@@ -69,7 +69,7 @@
 
 =head1 COPYRIGHT AND LICENSE
 
-Copyright (C) 2016-2018 by Thomas R. Wyant, III
+Copyright (C) 2016-2019 by Thomas R. Wyant, III
 
 This program is free software; you can redistribute it and/or modify it
 under the same terms as Perl 5.10.0. For more details, see the full text
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/PPIx-QuoteLike-0.006/lib/PPIx/QuoteLike/Token/Delimiter.pm 
new/PPIx-QuoteLike-0.007/lib/PPIx/QuoteLike/Token/Delimiter.pm
--- old/PPIx-QuoteLike-0.006/lib/PPIx/QuoteLike/Token/Delimiter.pm      
2018-07-09 16:30:41.000000000 +0200
+++ new/PPIx-QuoteLike-0.007/lib/PPIx/QuoteLike/Token/Delimiter.pm      
2019-05-31 17:09:10.000000000 +0200
@@ -9,7 +9,7 @@
 
 use PPIx::QuoteLike::Constant qw{ MINIMUM_PERL @CARP_NOT };
 
-our $VERSION = '0.006';
+our $VERSION = '0.007';
 
 # Perl 5.29.0 disallows unassigned code points and combining code points
 # as delimiters. Unfortunately for me non-characters and illegal
@@ -109,7 +109,7 @@
 
 =head1 COPYRIGHT AND LICENSE
 
-Copyright (C) 2016-2018 by Thomas R. Wyant, III
+Copyright (C) 2016-2019 by Thomas R. Wyant, III
 
 This program is free software; you can redistribute it and/or modify it
 under the same terms as Perl 5.10.0. For more details, see the full text
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/PPIx-QuoteLike-0.006/lib/PPIx/QuoteLike/Token/Interpolation.pm 
new/PPIx-QuoteLike-0.007/lib/PPIx/QuoteLike/Token/Interpolation.pm
--- old/PPIx-QuoteLike-0.006/lib/PPIx/QuoteLike/Token/Interpolation.pm  
2018-07-09 16:30:41.000000000 +0200
+++ new/PPIx-QuoteLike-0.007/lib/PPIx/QuoteLike/Token/Interpolation.pm  
2019-05-31 17:09:10.000000000 +0200
@@ -12,7 +12,7 @@
 
 use base qw{ PPIx::QuoteLike::Token };
 
-our $VERSION = '0.006';
+our $VERSION = '0.007';
 
 sub ppi {
     my ( $self ) = @_;
@@ -109,7 +109,7 @@
 
 =head1 COPYRIGHT AND LICENSE
 
-Copyright (C) 2016-2018 by Thomas R. Wyant, III
+Copyright (C) 2016-2019 by Thomas R. Wyant, III
 
 This program is free software; you can redistribute it and/or modify it
 under the same terms as Perl 5.10.0. For more details, see the full text
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/PPIx-QuoteLike-0.006/lib/PPIx/QuoteLike/Token/String.pm 
new/PPIx-QuoteLike-0.007/lib/PPIx/QuoteLike/Token/String.pm
--- old/PPIx-QuoteLike-0.006/lib/PPIx/QuoteLike/Token/String.pm 2018-07-09 
16:30:41.000000000 +0200
+++ new/PPIx-QuoteLike-0.007/lib/PPIx/QuoteLike/Token/String.pm 2019-05-31 
17:09:10.000000000 +0200
@@ -9,7 +9,7 @@
 
 use PPIx::QuoteLike::Constant qw{ @CARP_NOT };
 
-our $VERSION = '0.006';
+our $VERSION = '0.007';
 
 
 1;
@@ -58,7 +58,7 @@
 
 =head1 COPYRIGHT AND LICENSE
 
-Copyright (C) 2016-2018 by Thomas R. Wyant, III
+Copyright (C) 2016-2019 by Thomas R. Wyant, III
 
 This program is free software; you can redistribute it and/or modify it
 under the same terms as Perl 5.10.0. For more details, see the full text
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/PPIx-QuoteLike-0.006/lib/PPIx/QuoteLike/Token/Structure.pm 
new/PPIx-QuoteLike-0.007/lib/PPIx/QuoteLike/Token/Structure.pm
--- old/PPIx-QuoteLike-0.006/lib/PPIx/QuoteLike/Token/Structure.pm      
2018-07-09 16:30:41.000000000 +0200
+++ new/PPIx-QuoteLike-0.007/lib/PPIx/QuoteLike/Token/Structure.pm      
2019-05-31 17:09:10.000000000 +0200
@@ -9,7 +9,7 @@
 
 use PPIx::QuoteLike::Constant qw{ @CARP_NOT };
 
-our $VERSION = '0.006';
+our $VERSION = '0.007';
 
 
 1;
@@ -60,7 +60,7 @@
 
 =head1 COPYRIGHT AND LICENSE
 
-Copyright (C) 2016-2018 by Thomas R. Wyant, III
+Copyright (C) 2016-2019 by Thomas R. Wyant, III
 
 This program is free software; you can redistribute it and/or modify it
 under the same terms as Perl 5.10.0. For more details, see the full text
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/PPIx-QuoteLike-0.006/lib/PPIx/QuoteLike/Token/Unknown.pm 
new/PPIx-QuoteLike-0.007/lib/PPIx/QuoteLike/Token/Unknown.pm
--- old/PPIx-QuoteLike-0.006/lib/PPIx/QuoteLike/Token/Unknown.pm        
2018-07-09 16:30:41.000000000 +0200
+++ new/PPIx-QuoteLike-0.007/lib/PPIx/QuoteLike/Token/Unknown.pm        
2019-05-31 17:09:10.000000000 +0200
@@ -9,7 +9,7 @@
 
 use PPIx::QuoteLike::Constant qw{ @CARP_NOT };
 
-our $VERSION = '0.006';
+our $VERSION = '0.007';
 
 1;
 
@@ -56,7 +56,7 @@
 
 =head1 COPYRIGHT AND LICENSE
 
-Copyright (C) 2016-2018 by Thomas R. Wyant, III
+Copyright (C) 2016-2019 by Thomas R. Wyant, III
 
 This program is free software; you can redistribute it and/or modify it
 under the same terms as Perl 5.10.0. For more details, see the full text
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/PPIx-QuoteLike-0.006/lib/PPIx/QuoteLike/Token/Whitespace.pm 
new/PPIx-QuoteLike-0.007/lib/PPIx/QuoteLike/Token/Whitespace.pm
--- old/PPIx-QuoteLike-0.006/lib/PPIx/QuoteLike/Token/Whitespace.pm     
2018-07-09 16:30:41.000000000 +0200
+++ new/PPIx-QuoteLike-0.007/lib/PPIx/QuoteLike/Token/Whitespace.pm     
2019-05-31 17:09:10.000000000 +0200
@@ -9,7 +9,7 @@
 
 use PPIx::QuoteLike::Constant qw{ @CARP_NOT };
 
-our $VERSION = '0.006';
+our $VERSION = '0.007';
 
 
 sub significant {
@@ -66,7 +66,7 @@
 
 =head1 COPYRIGHT AND LICENSE
 
-Copyright (C) 2016-2018 by Thomas R. Wyant, III
+Copyright (C) 2016-2019 by Thomas R. Wyant, III
 
 This program is free software; you can redistribute it and/or modify it
 under the same terms as Perl 5.10.0. For more details, see the full text
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/PPIx-QuoteLike-0.006/lib/PPIx/QuoteLike/Token.pm 
new/PPIx-QuoteLike-0.007/lib/PPIx/QuoteLike/Token.pm
--- old/PPIx-QuoteLike-0.006/lib/PPIx/QuoteLike/Token.pm        2018-07-09 
16:30:41.000000000 +0200
+++ new/PPIx-QuoteLike-0.007/lib/PPIx/QuoteLike/Token.pm        2019-05-31 
17:09:10.000000000 +0200
@@ -8,7 +8,7 @@
 use Carp;
 use PPIx::QuoteLike::Constant qw{ MINIMUM_PERL @CARP_NOT };
 
-our $VERSION = '0.006';
+our $VERSION = '0.007';
 
 # Private to this package.
 sub __new {
@@ -104,6 +104,18 @@
 
 This Perl module represents the base of the token hierarchy.
 
+=head1 INHERITANCE
+
+C<PPIx::QuoteLike::Token> is not descended from any other class.
+
+C<PPIx::QuoteLike::Token> is the parent of
+L<PPIx::QuoteLike::Token::Control|PPIx::QuoteLike::Token::Control>,
+L<PPIx::QuoteLike::Token::Interpolation|PPIx::QuoteLike::Token::Interpolation>,
+L<PPIx::QuoteLike::Token::String|PPIx::QuoteLike::Token::String>,
+L<PPIx::QuoteLike::Token::Structure|PPIx::QuoteLike::Token::Structure>,
+L<PPIx::QuoteLike::Token::Unknown|PPIx::QuoteLike::Token::Unknown> and
+L<PPIx::QuoteLike::Token::Whitespace|PPIx::QuoteLike::Token::Whitespace>.
+
 =head1 METHODS
 
 This class supports the following public methods:
@@ -205,7 +217,7 @@
 
 =head1 COPYRIGHT AND LICENSE
 
-Copyright (C) 2016-2018 by Thomas R. Wyant, III
+Copyright (C) 2016-2019 by Thomas R. Wyant, III
 
 This program is free software; you can redistribute it and/or modify it
 under the same terms as Perl 5.10.0. For more details, see the full text
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/PPIx-QuoteLike-0.006/lib/PPIx/QuoteLike/Utils.pm 
new/PPIx-QuoteLike-0.007/lib/PPIx/QuoteLike/Utils.pm
--- old/PPIx-QuoteLike-0.006/lib/PPIx/QuoteLike/Utils.pm        2018-07-09 
16:30:41.000000000 +0200
+++ new/PPIx-QuoteLike-0.007/lib/PPIx/QuoteLike/Utils.pm        2019-05-31 
17:09:10.000000000 +0200
@@ -8,7 +8,7 @@
 use base qw{ Exporter };
 
 use Carp;
-use PPIx::QuoteLike::Constant qw{ VARIABLE_RE @CARP_NOT };
+use PPIx::QuoteLike::Constant qw{ HAVE_PPIX_REGEXP VARIABLE_RE @CARP_NOT };
 use Scalar::Util ();
 
 use constant LEFT_CURLY                => q<{>;
@@ -16,20 +16,13 @@
 
 our @EXPORT_OK = qw{ __variables };
 
-our $VERSION = '0.006';
+our $VERSION = '0.007';
 
 require PPIx::QuoteLike;
 
-# We can't depend on PPIx::Regexp without getting into a circular
-# dependency. I think. But we can sure use it if we can come by it.
-my $have_ppix_regexp = eval {
-    require PPIx::Regexp;
-    1;
-};
-
 {
 
-    # TODO make these state varables one we can require Perl 5.10.
+    # TODO make these state varables once we can require Perl 5.10.
     my $postderef = { map { $_ => 1 } qw{ @* %* } };
 
     my $cast_allowed_for_bare_bracketed_variable = {
@@ -39,12 +32,49 @@
        my ( $ppi ) = @_;
 
        Scalar::Util::blessed( $ppi )
-           and $ppi->isa( 'PPI::Node' )
-           or croak 'Argument must be a PPI::Node';
+           or croak 'Argument must be an object';
+
+       # TODO the following two lines are a crock, but there does not
+       # seem to be a good alternative. Bad alternatives:
+       # * Introduce PPIx::QuoteLike::Element. But it seems stupid to
+       #   introduce a class simply to mark these as members of the
+       #   PPIx::QuoteLike family.
+       #   If I go this way at all, PPIx::QuoteLike::Element should be
+       #   analogous to PPIx::Regexp::Element in that it carries at
+       #   least the navigational and Perl version methods.
+       # * Use DOES(). But that was not introduced until 5.10. So I
+       #   could:
+       #   - Depend on UNIVERSAL::DOES. This kindly steps aside if
+       #     UNIVERSAL::DOES() exists, but it seems stupid to introduce
+       #     a dependency that is only needed under really old Perls.
+       #   - Same as above, only make the dependence conditional on the
+       #     version of Perl. This may actually be the best
+       #     alternative, but it's still pretty crufty.
+       $ppi->isa( 'PPIx::QuoteLike' )
+           and return $ppi->variables();
+       $ppi->isa( 'PPIx::QuoteLike::Token' )
+           and return $ppi->variables();
 
        my %var;
 
-       foreach my $sym ( @{ $ppi->find( 'PPI::Token::Symbol' ) || [] } ) {
+       $ppi->isa( 'PPIx::Regexp::Element' )
+           and do {
+               foreach my $code ( @{ $ppi->find(
+                   'PPIx::Regexp::Token::Code' ) || [] } ) {
+                   foreach my $name ( __variables( $code->ppi() ) ) {
+                       $var{ $name } = 1;
+                   }
+               }
+               return keys %var;
+           };
+
+
+       $ppi->isa( 'PPI::Element' )
+           or croak 'Argument must be a PPI::Element, ',
+               'PPIx::Regexp::Element, PPIx::QuoteLike, or ',
+               'PPIx::QuoteLike::Token';
+
+       foreach my $sym ( _find( $ppi, 'PPI::Token::Symbol' ) ) {
            # The problem we're solving here is that PPI parses postfix
            # dereference as though it makes reference to non-existent
            # punctuation variables '@*' or '%*'. The following
@@ -74,9 +104,7 @@
         # by a Symbol, so as long as nobody decides the '$#' cast causes
         # $elem->symbol() to return something other than '$foo', we're
         # cool.
-        foreach my $elem (
-            @{ $ppi->find( 'PPI::Token::ArrayIndex' ) || [] }
-        ) {
+        foreach my $elem ( _find( $ppi, 'PPI::Token::ArrayIndex' ) ) {
             my $name = $elem->content();
             $name =~ s/ \A \$ [#] /@/smx or next;
            $var{$name} = 1;
@@ -88,9 +116,7 @@
         # words in most Perl, we start at the top and work down. Perl
         # also handles punctuation variables specified this way, but
         # since PPI goes berserk when it sees this, we won't bother.
-        foreach my $elem (
-            @{ $ppi->find( 'PPI::Structure::Block' ) || [] }
-        ) {
+        foreach my $elem ( _find( $ppi, 'PPI::Structure::Block' ) ) {
 
             my $previous = $elem->sprevious_sibling()
                 or next;
@@ -154,7 +180,7 @@
                PPI::Token::QuoteLike::Readline
                PPI::Token::HereDoc
            } ) {
-           foreach my $elem ( @{ $ppi->find( $class ) || [] } ) {
+           foreach my $elem ( _find( $ppi, $class ) ) {
 
                my $ql = PPIx::QuoteLike->new( $elem )
                    or next;
@@ -169,13 +195,13 @@
        # By the same token we might have a regexp
        # TODO for consistency's sake, give PPIx::Regexp a variables()
        # method.
-       if ( $have_ppix_regexp ) {
+       if ( HAVE_PPIX_REGEXP ) {
            foreach my $class ( qw{
                    PPI::Token::QuoteLike::Regexp
                    PPI::Token::Regexp::Match
                    PPI::Token::Regexp::Substitute
                } ) {
-               foreach my $elem ( @{ $ppi->find( $class ) || [] } ) {
+               foreach my $elem ( _find( $ppi, $class ) ) {
                    my $re = PPIx::Regexp->new( $elem )
                        or next;
                    foreach my $code ( @{ $re->find(
@@ -192,6 +218,18 @@
     }
 }
 
+# We want __variables to work when passed a single token. So we go
+# through this to do what we wish PPI did -- return an array for a
+# PPI::Node, or return either the element itself or nothing otherwise.
+sub _find {
+    my ( $elem, $class ) = @_;
+    $elem->isa( 'PPI::Node' )
+       and return @{ $elem->find( $class ) || [] };
+    $elem->isa( $class )
+       and return $elem;
+    return;
+}
+
 # The problem this solves is that PPI can parse '{_}' as containing a
 # PPI::Token::Magic (which is a PPI::Token::Symbol), not a
 # PPI::Token::Word. This code also returns true for '${_}', which is not
@@ -319,9 +357,10 @@
 and supported. The underscores are so it will not appear to be public
 code to various tools when imported into other code.
 
-This subroutine takes as its only argument a L<PPI::Node|PPI::Node>, and
-returns the names of all variables found in that node, in no particular
-order. Scope is not taken into account.
+This subroutine takes as its only argument a
+L<PPI::Element|PPI::Element>, and returns the names of all variables
+found in that element, in no particular order. Scope is not taken into
+account.
 
 In addition to reporting variables parsed as such by L<PPI|PPI>, and
 various corner cases such as C<${]}> where PPI is blind to the use of
@@ -353,7 +392,7 @@
 
 =head1 COPYRIGHT AND LICENSE
 
-Copyright (C) 2016-2018 by Thomas R. Wyant, III
+Copyright (C) 2016-2019 by Thomas R. Wyant, III
 
 This program is free software; you can redistribute it and/or modify it
 under the same terms as Perl 5.10.0. For more details, see the full text
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/PPIx-QuoteLike-0.006/lib/PPIx/QuoteLike.pm 
new/PPIx-QuoteLike-0.007/lib/PPIx/QuoteLike.pm
--- old/PPIx-QuoteLike-0.006/lib/PPIx/QuoteLike.pm      2018-07-09 
16:30:41.000000000 +0200
+++ new/PPIx-QuoteLike-0.007/lib/PPIx/QuoteLike.pm      2019-05-31 
17:09:10.000000000 +0200
@@ -18,7 +18,7 @@
 use PPIx::QuoteLike::Token::Whitespace;
 use Scalar::Util ();
 
-our $VERSION = '0.006';
+our $VERSION = '0.007';
 
 use constant CODE_REF  => ref sub {};
 
@@ -163,6 +163,24 @@
                    redo;
                }
 
+               # Handle \N{...} separately because it can not contain
+               # an interpolation even inside of an
+               # otherwise-interpolating string. That is to say,
+               # "\N{$foo}" is simply invalid, and does not even try to
+               # interpolate $foo.  {
+               if ( $content =~ m/ \G ( \\ N [{] ( [^}]+ ) [}] ) /smxgc ) {
+                   my ( $seq, $name ) = ( $1, $2 );
+                   # TODO The Regexp is certainly too permissive. For
+                   # the moment all I am doing is disallowing
+                   # interpolation.
+                   push @children, $name =~ m/ [\$\@] /smx ?
+                       $self->_unknown( $seq, "Unknown charname '$name'" ) :
+                       PPIx::QuoteLike::Token::String->__new(
+                           content     => $seq,
+                       );
+                   redo;
+               }
+
                if ( $content =~ m/ \G ( [\$\@] \#? \$* ) /smxgc ) {
                    push @children, $self->_interpolation( "$1", $content );
                    redo;
@@ -749,6 +767,12 @@
 interpolated variables for L<Perl::Critic|Perl::Critic> policies and
 similar code.
 
+=head1 INHERITANCE
+
+C<PPIx::QuoteLike> is not descended from any other class.
+
+C<PPIx::QuoteLike> has no descendants.
+
 =head1 METHODS
 
 This class supports the following public methods:
@@ -1007,7 +1031,7 @@
 Sometimes the introduction of new syntax changes the way a string is
 parsed. For example, the C<\F> (fold case) case control was introduced
 in Perl 5.15.8. But it did not represent a syntax error prior to that
-version of Perl, it was simply parsed as C<V>. So
+version of Perl, it was simply parsed as C<F>. So
 
  $ perl -le 'print "Foo\FBar"'
 
@@ -1029,7 +1053,7 @@
 =head2 Non-Standard Syntax
 
 There are modules out there that alter the syntax of Perl. If the syntax
-of a regular expression is altered, this module has no way to understand
+of a quote-like string is altered, this module has no way to understand
 that it has been altered, much less to adapt to the alteration. The
 following modules are known to cause problems:
 
@@ -1056,7 +1080,7 @@
 
 =head1 COPYRIGHT AND LICENSE
 
-Copyright (C) 2016-2018 by Thomas R. Wyant, III
+Copyright (C) 2016-2019 by Thomas R. Wyant, III
 
 This program is free software; you can redistribute it and/or modify it
 under the same terms as Perl 5.10.0. For more details, see the full text
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/PPIx-QuoteLike-0.006/t/parse.t 
new/PPIx-QuoteLike-0.007/t/parse.t
--- old/PPIx-QuoteLike-0.006/t/parse.t  2018-07-09 16:30:41.000000000 +0200
+++ new/PPIx-QuoteLike-0.007/t/parse.t  2019-05-31 17:09:10.000000000 +0200
@@ -562,6 +562,42 @@
     }
 }
 
+$obj = PPIx::QuoteLike->new( q/"\N{$foo}"/ );
+if ( ok $obj, q{Able to parse "\N{$foo}"} ) {
+    cmp_ok $obj->failures(), '==', 1, q{Failures parsing "\N{$foo}"};
+    cmp_ok $obj->interpolates(), '==', 1, q{Does "\N{$foo}" interpolate};
+    is $obj->content(), q/"\N{$foo}"/, q{Can recover "\N{$foo}"};
+    is $obj->__get_value( 'type' ), q{}, q{Type of "\N{$foo}"};
+    is $obj->delimiters(), q{""}, q{Delimiters of "\N{$foo}"};
+    is $obj->__get_value( 'start' ), q{"}, q{Start delimiter of "\N{$foo}"};
+    is $obj->__get_value( 'finish' ), q{"}, q{Finish delimiter of "\N{$foo}"};
+    is $obj->encoding(), undef, q{"\N{$foo}" encoding};
+    if ( eval { require PPI::Document; 1 } ) {
+       is_deeply [ sort $obj->variables() ],
+           [ qw{  } ],
+           q{"\N{$foo}" interpolated variables};
+    }
+    cmp_ok $obj->postderef(), '==', 1, q{"\N{$foo}" postderef};
+    cmp_ok scalar $obj->elements(), '==', 4,
+       q{Number of elements of "\N{$foo}"};
+    cmp_ok scalar $obj->children(), '==', 1,
+       q{Number of children of "\N{$foo}"};
+    if ( my $kid = $obj->child( 0 ) ) {
+       ok $kid->isa( 'PPIx::QuoteLike::Token::Unknown' ),
+           q{"\N{$foo}" child 0 class};
+       is $kid->content(), q/\N{$foo}/,
+           q{"\N{$foo}" child 0 content};
+       is $kid->error(), q{Unknown charname '$foo'},
+           q{"\N{$foo}" child 0 error};
+       cmp_ok $kid->parent(), '==', $obj,
+           q{"\N{$foo}" child 0 parent};
+       cmp_ok $kid->previous_sibling() || 0, '==', $obj->__kid( 0 - 1 ),
+           q{"\N{$foo}" child 0 previous sibling};
+       cmp_ok $kid->next_sibling() || 0, '==', $obj->__kid( 0 + 1 ),
+           q{"\N{$foo}" child 0 next sibling};
+    }
+}
+
 $obj = PPIx::QuoteLike->new( <<'__END_OF_HERE_DOCUMENT'
 << "EOD"
 $foo->{bar}bazzle
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/PPIx-QuoteLike-0.006/t/variables.t 
new/PPIx-QuoteLike-0.007/t/variables.t
--- old/PPIx-QuoteLike-0.006/t/variables.t      1970-01-01 01:00:00.000000000 
+0100
+++ new/PPIx-QuoteLike-0.007/t/variables.t      2019-05-31 17:09:10.000000000 
+0200
@@ -0,0 +1,89 @@
+package main;
+
+use 5.006;
+
+use strict;
+use warnings;
+
+use PPI::Document;
+use PPIx::QuoteLike::Constant qw{ HAVE_PPIX_REGEXP };
+use PPIx::QuoteLike::Utils qw{ __variables };
+use Test::More 0.88;   # Because of done_testing();
+
+sub check (@);
+sub check_class (@);
+sub check_token (@);
+
+check q<"foo$bar">, qw< $bar >;
+
+check q<'foo$bar'>;
+
+check_token q<"foo$bar">, qw< $bar >;
+
+check_token q<'foo$bar'>;
+
+check_class q<"foo$bar">, qw< PPIx::QuoteLike $bar >;
+
+# Note -- the following was done using the trinary operator rather than
+# if/else because I hoped that with the former implementation, when I
+# added tests I would do so correctly.
+
+note HAVE_PPIX_REGEXP ?
+    'PPIx::Regexp is installed; we can find variables in Regexps' :
+    'PPIx::Regexp is not installed; we can not find variables in Regexps';
+
+check q<my ( $foo ) = $bar =~ m/(baz|$burfle)/smx;>,
+    HAVE_PPIX_REGEXP ?  qw< $bar $burfle $foo > :
+       qw< $bar $foo >;
+
+check q<qr/ foo (?{ "$bar" }) />,
+    HAVE_PPIX_REGEXP ? qw< $bar > : ();
+
+check_token q<s/ foo ( $bar[0] ) / xyz( $1 ) /smxe;>,
+    HAVE_PPIX_REGEXP ? qw{ $1 @bar } : ();
+
+if ( HAVE_PPIX_REGEXP ) {
+
+    check_class q<qr/ foo (?{ "$bar" }) />, qw< PPIx::Regexp $bar >;
+
+}
+
+done_testing;
+
+sub check (@) {
+    my ( $expr, @want ) = @_;
+    my $doc = PPI::Document->new( \$expr );
+    my @got = sort( __variables( $doc ) );
+    @_ = ( \@got, [ sort @want ], "Variables in q<$expr>" );
+    goto &is_deeply;
+}
+
+sub check_class (@) {
+    my ( $expr, $class, @want ) = @_;
+    ( my $fn = "$class.pm" ) =~ s| :: |/|smxg;
+    require $fn;
+    my $obj = $class->new( $expr );
+    my @got = sort( __variables( $obj ) );
+    @_ = ( \@got, [ sort @want ], "Variables in $class q<$expr>" );
+    goto &is_deeply;
+}
+
+sub check_token (@) {
+    my ( $expr, @want ) = @_;
+    my $doc = PPI::Document->new( \$expr );
+    my ( $elem ) = @{ $doc->find( sub {
+       $_[1]->significant() && ! $_[1]->isa( 'PPI::Node' )
+    } ) || [] };
+    if ( $elem ) {
+       my @got = sort( __variables( $elem ) );
+       @_ = ( \@got, [ sort @want ], "Variables in first token of q<$expr>" );
+       goto &is_deeply;
+    } else {
+       @_ = ( "No tokens found in q<$expr>" );
+       goto &fail;
+    }
+}
+
+1;
+
+# ex: set textwidth=72 :

++++++ cpanspec.yml ++++++
---
#description_paragraphs: 3
#description: |-
#  override description from CPAN
#summary: override summary from CPAN
#no_testing: broken upstream
#sources:
#  - source1
#  - source2
#patches:
#  foo.patch: -p1
#  bar.patch:
#preamble: |-
# BuildRequires:  gcc-c++
#post_prep: |-
# hunspell=`pkg-config --libs hunspell | sed -e 's,-l,,; s,  *,,g'`
# sed -i -e "s,hunspell-X,$hunspell," t/00-prereq.t Makefile.PL 
#post_build: |-
# rm unused.files
#post_install: |-
# sed on %{name}.files
#license: SUSE-NonFree
#skip_noarch: 1
#custom_build: |-
#./Build build flags=%{?_smp_mflags} --myflag
#custom_test: |-
#startserver && make test
#ignore_requires: Bizarre::Module

Reply via email to