Script 'mail_helper' called by obssrc
Hello community,
here is the log from the commit of package perl-Router-Simple for
openSUSE:Factory checked in at 2026-11-07 23:33:19
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/perl-Router-Simple (Old)
and /work/SRC/openSUSE:Factory/.perl-Router-Simple.new.3759290 (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "perl-Router-Simple"
Sat Nov 7 23:33:19 2026 rev:6 rq:1396026 version:0.180.0
Changes:
--------
--- /work/SRC/openSUSE:Factory/perl-Router-Simple/perl-Router-Simple.changes
2015-04-15 16:23:18.000000000 +0200
+++
/work/SRC/openSUSE:Factory/.perl-Router-Simple.new.3759290/perl-Router-Simple.changes
2026-11-07 23:33:59.016944953 +0100
@@ -1,0 +2,13 @@
+Fri Nov 6 11:35:04 UTC 2026 - Tina Müller <[email protected]>
+
+- updated to 0.180.0 (0.18)
+ see /usr/share/doc/packages/perl-Router-Simple/Changes
+
+ 0.18 2026-11-05T09:46:23Z
+
+ - Anchor route regexps at the end of the string with \z instead of $,
+ so that a path, method or host with a trailing newline no longer
+ matches. (polamjag)
+ - Require perl 5.10.
+
+-------------------------------------------------------------------
Old:
----
Router-Simple-0.17.tar.gz
New:
----
README.md
Router-Simple-0.18.tar.gz
_scmsync.obsinfo
build.specials.obscpio
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Other differences:
------------------
++++++ perl-Router-Simple.spec ++++++
--- /var/tmp/diff_new_pack.YJ7RkM/_old 2026-11-07 23:34:00.266996604 +0100
+++ /var/tmp/diff_new_pack.YJ7RkM/_new 2026-11-07 23:34:00.268996686 +0100
@@ -1,7 +1,7 @@
#
# spec file for package perl-Router-Simple
#
-# Copyright (c) 2015 SUSE LINUX GmbH, Nuernberg, Germany.
+# Copyright (c) 2026 SUSE LLC and contributors
#
# All modifications and additions to the file contributed by third parties
# remain the property of their copyright owners, unless otherwise agreed
@@ -12,29 +12,36 @@
# license that conforms to the Open Source Definition (Version 1.9)
# published by the Open Source Initiative.
-# Please submit bugfixes or comments via http://bugs.opensuse.org/
+# Please submit bugfixes or comments via https://bugs.opensuse.org/
#
+%define cpan_name Router-Simple
Name: perl-Router-Simple
-Version: 0.17
+Version: 0.180.0
Release: 0
-%define cpan_name Router-Simple
-Summary: simple HTTP router
-License: Artistic-1.0 or GPL-1.0+
-Group: Development/Libraries/Perl
-Url: http://search.cpan.org/dist/Router-Simple/
-Source:
http://www.cpan.org/authors/id/T/TO/TOKUHIROM/%{cpan_name}-%{version}.tar.gz
+# 0.18 -> normalize -> 0.180.0
+%define cpan_version 0.18
+License: Artistic-1.0 OR GPL-1.0-or-later
+Summary: Simple HTTP router
+URL: https://metacpan.org/release/%{cpan_name}
+Source0:
https://cpan.metacpan.org/authors/id/T/TO/TOKUHIROM/%{cpan_name}-%{cpan_version}.tar.gz
+Source100: README.md
BuildArch: noarch
-BuildRoot: %{_tmppath}/%{name}-%{version}-build
BuildRequires: perl
BuildRequires: perl-macros
-BuildRequires: perl(Class::Accessor::Lite) >= 0.05
-BuildRequires: perl(Module::Build) >= 0.38
+BuildRequires: perl(Class::Accessor::Lite) >= 0.50
+BuildRequires: perl(Module::Build)
+BuildRequires: perl(Module::Build::Tiny) >= 0.35
BuildRequires: perl(Test::More) >= 0.98
BuildRequires: perl(parent)
-Requires: perl(Class::Accessor::Lite) >= 0.05
+Requires: perl(Class::Accessor::Lite) >= 0.50
Requires: perl(parent)
+Provides: perl(Router::Simple) = %{version}
+Provides: perl(Router::Simple::Declare)
+Provides: perl(Router::Simple::Route)
+Provides: perl(Router::Simple::SubMapper)
+%undefine __perllib_provides
%{perl_requires}
%description
@@ -46,20 +53,20 @@
easy to use with PSGI supporting web frameworks.
%prep
-%setup -q -n %{cpan_name}-%{version}
+%autosetup -n %{cpan_name}-%{cpan_version} -p1
%build
-%{__perl} Build.PL installdirs=vendor
-./Build build flags=%{?_smp_mflags}
+perl Build.PL --installdirs=vendor
+./Build build --flags=%{?_smp_mflags}
%check
./Build test
%install
-./Build install destdir=%{buildroot} create_packlist=0
+./Build install --destdir=%{buildroot} --create_packlist=0
%perl_gen_filelist
%files -f %{name}.files
-%defattr(-,root,root,755)
-%doc Changes LICENSE minil.toml README.md
+%doc Changes README.md
+%license LICENSE
++++++ README.md ++++++
## Build Results
Current state of perl in openSUSE:Factory is

The current state of perl in the devel project build (devel:languages:perl)

++++++ Router-Simple-0.17.tar.gz -> Router-Simple-0.18.tar.gz ++++++
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/Router-Simple-0.17/Build.PL
new/Router-Simple-0.18/Build.PL
--- old/Router-Simple-0.17/Build.PL 2014-12-02 07:58:37.000000000 +0100
+++ new/Router-Simple-0.18/Build.PL 2026-11-05 10:46:23.000000000 +0100
@@ -4,62 +4,9 @@
# =========================================================================
use 5.008_001;
-
use strict;
-use warnings;
-use utf8;
-
-use Module::Build;
-use File::Basename;
-use File::Spec;
-
-my %args = (
- license => 'perl',
- dynamic_config => 0,
-
- configure_requires => {
- 'Module::Build' => 0.38,
- },
-
- name => 'Router-Simple',
- module_name => 'Router::Simple',
- allow_pureperl => 0,
-
- script_files => [glob('script/*'), glob('bin/*')],
- c_source => [qw()],
- PL_files => {},
-
- test_files => ((-d '.git' || $ENV{RELEASE_TESTING}) && -d 'xt')
? 't/ xt/' : 't/',
- recursive_test_files => 1,
-
-
-);
-if (-d 'share') {
- $args{share_dir} = 'share';
-}
-
-my $builder = Module::Build->subclass(
- class => 'MyBuilder',
- code => q{
- sub ACTION_distmeta {
- die "Do not run distmeta. Install Minilla and `minil install`
instead.\n";
- }
- sub ACTION_installdeps {
- die "Do not run installdeps. Run `cpanm --installdeps .`
instead.\n";
- }
- }
-)->new(%args);
-$builder->create_build_script();
-
-use File::Copy;
-print "cp META.json MYMETA.json\n";
-copy("META.json","MYMETA.json") or die "Copy failed(META.json): $!";
+use Module::Build::Tiny 0.035;
-if (-f 'META.yml') {
- print "cp META.yml MYMETA.yml\n";
- copy("META.yml","MYMETA.yml") or die "Copy failed(META.yml): $!";
-} else {
- print "There is no META.yml... You may install this module from the
repository...\n";
-}
+Build_PL();
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/Router-Simple-0.17/Changes
new/Router-Simple-0.18/Changes
--- old/Router-Simple-0.17/Changes 2014-12-02 07:58:37.000000000 +0100
+++ new/Router-Simple-0.18/Changes 2026-11-05 10:46:23.000000000 +0100
@@ -1,5 +1,12 @@
Revision history for Perl module Router::Simple
+0.18 2026-11-05T09:46:23Z
+
+ - Anchor route regexps at the end of the string with \z instead of $,
+ so that a path, method or host with a trailing newline no longer
+ matches. (polamjag)
+ - Require perl 5.10.
+
0.17 2014-12-02T06:58:23Z
commit 35bb954a60cdd9225858b522f118d5851f69e3ce
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/Router-Simple-0.17/MANIFEST
new/Router-Simple-0.18/MANIFEST
--- old/Router-Simple-0.17/MANIFEST 2014-12-02 07:58:37.000000000 +0100
+++ new/Router-Simple-0.18/MANIFEST 2026-11-05 10:46:23.000000000 +0100
@@ -24,6 +24,7 @@
t/12_paren_warnings.t
t/13_method_not_allowed.t
t/14_ending_slash.t
+t/15_trailing_newline.t
xt/02_perlcritic.t
xt/04_synopsis.t
META.yml
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/Router-Simple-0.17/META.json
new/Router-Simple-0.18/META.json
--- old/Router-Simple-0.17/META.json 2014-12-02 07:58:37.000000000 +0100
+++ new/Router-Simple-0.18/META.json 2026-11-05 10:46:23.000000000 +0100
@@ -4,7 +4,7 @@
"Tokuhiro Matsuno <tokuhirom AAJKLFJEF@ GMAIL COM>"
],
"dynamic_config" : 0,
- "generated_by" : "Minilla/v2.1.1",
+ "generated_by" : "Minilla/v3.3.2",
"license" : [
"perl_5"
],
@@ -28,14 +28,14 @@
"prereqs" : {
"configure" : {
"requires" : {
- "Module::Build" : "0.38"
+ "Module::Build::Tiny" : "0.035"
}
},
"develop" : {
"requires" : {
"Test::CPAN::Meta" : "0",
"Test::MinimumVersion::Fast" : "0.04",
- "Test::PAUSE::Permissions" : "0.04",
+ "Test::PAUSE::Permissions" : "0.07",
"Test::Pod" : "1.41",
"Test::Spellunker" : "v0.2.7"
}
@@ -46,7 +46,7 @@
"List::Util" : "0",
"Scalar::Util" : "0",
"parent" : "0",
- "perl" : "5.008_001"
+ "perl" : "5.010"
}
},
"test" : {
@@ -58,7 +58,7 @@
"provides" : {
"Router::Simple" : {
"file" : "lib/Router/Simple.pm",
- "version" : "0.17"
+ "version" : "0.18"
},
"Router::Simple::Declare" : {
"file" : "lib/Router/Simple/Declare.pm"
@@ -77,21 +77,27 @@
},
"homepage" : "https://github.com/tokuhirom/p5-router-simple",
"repository" : {
- "url" : "git://github.com/tokuhirom/p5-router-simple.git",
+ "type" : "git",
+ "url" : "https://github.com/tokuhirom/p5-router-simple.git",
"web" : "https://github.com/tokuhirom/p5-router-simple"
}
},
- "version" : "0.17",
+ "version" : "0.18",
"x_contributors" : [
- "Shawn M Moore <[email protected]>",
- "Tatsuhiko Miyagawa <[email protected]>",
- "nipotan <[email protected]>",
- "Naoki Tomita <[email protected]>",
- "Philippe Bruhat (BooK) <[email protected]>",
"David Steinbrunner <[email protected]>",
- "Neil Bowers <[email protected]>",
"Fayland Lam <[email protected]>",
"Maurice Aubrey <[email protected]>",
- "Tokuhiro Matsuno <[email protected]>"
- ]
+ "Naoki Tomita <[email protected]>",
+ "Neil Bowers <[email protected]>",
+ "Philippe Bruhat (BooK) <[email protected]>",
+ "Ricardo Signes <[email protected]>",
+ "Shawn M Moore <[email protected]>",
+ "Tatsuhiko Miyagawa <[email protected]>",
+ "Tokuhiro Matsuno <[email protected]>",
+ "kga <[email protected]>",
+ "nipotan <[email protected]>",
+ "polamjag <[email protected]>"
+ ],
+ "x_serialization_backend" : "JSON::PP version 4.16",
+ "x_static_install" : 1
}
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/Router-Simple-0.17/META.yml
new/Router-Simple-0.18/META.yml
--- old/Router-Simple-0.17/META.yml 2014-12-02 07:58:37.000000000 +0100
+++ new/Router-Simple-0.18/META.yml 2026-11-05 10:46:23.000000000 +0100
@@ -5,9 +5,9 @@
build_requires:
Test::More: '0.98'
configure_requires:
- Module::Build: '0.38'
+ Module::Build::Tiny: '0.035'
dynamic_config: 0
-generated_by: 'Minilla/v2.1.1, CPAN::Meta::Converter version 2.141520'
+generated_by: 'Minilla/v3.3.2, CPAN::Meta::Converter version 2.150010'
license: perl
meta-spec:
url: http://module-build.sourceforge.net/META-spec-v1.4.html
@@ -26,7 +26,7 @@
provides:
Router::Simple:
file: lib/Router/Simple.pm
- version: '0.17'
+ version: '0.18'
Router::Simple::Declare:
file: lib/Router/Simple/Declare.pm
Router::Simple::Route:
@@ -38,20 +38,25 @@
List::Util: '0'
Scalar::Util: '0'
parent: '0'
- perl: 5.008_001
+ perl: '5.010'
resources:
bugtracker: https://github.com/tokuhirom/p5-router-simple/issues
homepage: https://github.com/tokuhirom/p5-router-simple
- repository: git://github.com/tokuhirom/p5-router-simple.git
-version: '0.17'
+ repository: https://github.com/tokuhirom/p5-router-simple.git
+version: '0.18'
x_contributors:
- - 'Shawn M Moore <[email protected]>'
- - 'Tatsuhiko Miyagawa <[email protected]>'
- - 'nipotan <[email protected]>'
- - 'Naoki Tomita <[email protected]>'
- - 'Philippe Bruhat (BooK) <[email protected]>'
- 'David Steinbrunner <[email protected]>'
- - 'Neil Bowers <[email protected]>'
- 'Fayland Lam <[email protected]>'
- 'Maurice Aubrey <[email protected]>'
+ - 'Naoki Tomita <[email protected]>'
+ - 'Neil Bowers <[email protected]>'
+ - 'Philippe Bruhat (BooK) <[email protected]>'
+ - 'Ricardo Signes <[email protected]>'
+ - 'Shawn M Moore <[email protected]>'
+ - 'Tatsuhiko Miyagawa <[email protected]>'
- 'Tokuhiro Matsuno <[email protected]>'
+ - 'kga <[email protected]>'
+ - 'nipotan <[email protected]>'
+ - 'polamjag <[email protected]>'
+x_serialization_backend: 'CPAN::Meta::YAML version 0.020'
+x_static_install: 1
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/Router-Simple-0.17/README.md
new/Router-Simple-0.18/README.md
--- old/Router-Simple-0.17/README.md 2014-12-02 07:58:37.000000000 +0100
+++ new/Router-Simple-0.18/README.md 2026-11-05 10:46:23.000000000 +0100
@@ -41,7 +41,7 @@
$router->match('/wiki/john');
# => {controller => 'WikiPage', action => 'show', page => 'john' }
-':name' notation matches `qr{([^/]+)}`.
+':name' notation matches `qr{([^/]+)}`, and it will be captured.
## '\*' notation
@@ -60,7 +60,8 @@
$router->match('/blog/2010');
# => {controller => 'Blog', action => 'yearly', year => 2010 }
-'{year}' notation matches `qr{([^/]+)}`, and it will be captured.
+'{year}' notation matches `qr{([^/]+)}`, and it will be captured. '{year}'
+behaves the same was as ':year'.
## '{year:\[0-9\]+}' notation
@@ -89,7 +90,9 @@
- $router->method\_not\_allowed() : Boolean
- This method returns last `$router->match()` call is rejected by HTTP
method or not.
+ If the last attempt to match with `$router->match()` was rejected because
+ the HTTP method was disallowed (as opposed to, say, not matching any routed
+ paths) this method returns true.
- $router->connect(\[$name, \] $pattern, \\%destination\[, \\%options\])
@@ -101,9 +104,11 @@
$router->connect( '/blog/:id', { controller => 'Blog', action =>
'show' } );
$router->connect( '/comment', { controller => 'Comment', action =>
'new_comment' }, {method => 'POST'} );
+ 'connect' returns the router object, so 'connect' calls can be chained.
+
`\%destination` will be used by _match_ method.
- You can specify some optional things to `\%options`. The current
+ You can specify some optional things in `\%options`. The current
version supports 'method', 'host', and 'on\_match'.
- method
@@ -132,9 +137,9 @@
successful or false otherwise. The first argument is `$env` which is
either a PSGI environment or a request path, depending on what you
pass to `match` method; the second is the routing variables that
- would be returned if the match succeeds.
+ will be returned if the match succeeds.
- The function can modify `$env` (in case it's a reference) and
+ The function can modify `$env` (if it's a reference) and
`$match` in place to affect which variables are returned. This allows
a wide range of transformations.
@@ -142,7 +147,7 @@
$router->submapper('/entry/', {controller => 'Entry'})
- This method is shorthand for creating new instance of
[Router::Simple::Submapper](https://metacpan.org/pod/Router::Simple::Submapper).
+ This method is shorthand for creating new instance of
[Router::Simple::SubMapper](https://metacpan.org/pod/Router%3A%3ASimple%3A%3ASubMapper).
The arguments will be passed to `Router::Simple::SubMapper->new(%args)`.
@@ -168,7 +173,7 @@
Match a URL against one of the routes contained.
Will return undef if no valid match is found, otherwise a
- result hashref and a
[Router::Simple::Route](https://metacpan.org/pod/Router::Simple::Route) object
is returned.
+ result hashref and a
[Router::Simple::Route](https://metacpan.org/pod/Router%3A%3ASimple%3A%3ARoute)
object is returned.
- `$router->as_string()`
@@ -184,7 +189,7 @@
# AUTHOR
-Tokuhiro Matsuno <tokuhirom AAJKLFJEF@ GMAIL COM>
+Tokuhiro Matsuno <tokuhirom AAJKLFJEF@ GMAIL COM>
# THANKS TO
@@ -198,13 +203,13 @@
Router::Simple is inspired by [routes.py](http://routes.groovie.org/).
-[Path::Dispatcher](https://metacpan.org/pod/Path::Dispatcher) is similar, but
so complex.
+[Path::Dispatcher](https://metacpan.org/pod/Path%3A%3ADispatcher) is similar,
but so complex.
-[Path::Router](https://metacpan.org/pod/Path::Router) is heavy. It depends on
[Moose](https://metacpan.org/pod/Moose).
+[Path::Router](https://metacpan.org/pod/Path%3A%3ARouter) is heavy. It depends
on [Moose](https://metacpan.org/pod/Moose).
-[HTTP::Router](https://metacpan.org/pod/HTTP::Router) has many dependencies.
It is not well documented.
+[HTTP::Router](https://metacpan.org/pod/HTTP%3A%3ARouter) has many
dependencies. It is not well documented.
-[HTTPx::Dispatcher](https://metacpan.org/pod/HTTPx::Dispatcher) is my old one.
It does not provide an OO-ish interface.
+[HTTPx::Dispatcher](https://metacpan.org/pod/HTTPx%3A%3ADispatcher) is my old
one. It does not provide an OO-ish interface.
# THANKS TO
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/Router-Simple-0.17/cpanfile
new/Router-Simple-0.18/cpanfile
--- old/Router-Simple-0.17/cpanfile 2014-12-02 07:58:37.000000000 +0100
+++ new/Router-Simple-0.18/cpanfile 2026-11-05 10:46:23.000000000 +0100
@@ -1,4 +1,4 @@
-requires 'perl', '5.008_001';
+requires 'perl', '5.010';
requires 'Class::Accessor::Lite', '0.05';
requires 'List::Util';
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/Router-Simple-0.17/lib/Router/Simple/Route.pm
new/Router-Simple-0.18/lib/Router/Simple/Route.pm
--- old/Router-Simple-0.17/lib/Router/Simple/Route.pm 2014-12-02
07:58:37.000000000 +0100
+++ new/Router-Simple-0.18/lib/Router/Simple/Route.pm 2026-11-05
10:46:23.000000000 +0100
@@ -27,11 +27,11 @@
$row->{method} = $method;
my $method_re = join '|', @{$method};
- $row->{method_re} = qr{^(?:$method_re)$};
+ $row->{method_re} = qr{^(?:$method_re)\z};
}
if (my $host = $opt->{host}) {
$row->{host} = $host;
- $row->{host_re} = ref $host ? $host : qr(^\Q$host\E$);
+ $row->{host_re} = ref $host ? $host : qr(^\Q$host\E\z);
}
$row->{pattern} = $pattern;
@@ -65,7 +65,7 @@
!gex;
# for example, pattern '/comment/' will both match '/comment/' and
'/comment'
$pattern .= '?' if $opt->{directory_slash} and $pattern =~ m{\/$};
- qr{^$pattern$};
+ qr{^$pattern\z};
}
};
$row->{capture} = \@capture;
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/Router-Simple-0.17/lib/Router/Simple.pm
new/Router-Simple-0.18/lib/Router/Simple.pm
--- old/Router-Simple-0.17/lib/Router/Simple.pm 2014-12-02 07:58:37.000000000
+0100
+++ new/Router-Simple-0.18/lib/Router/Simple.pm 2026-11-05 10:46:23.000000000
+0100
@@ -2,7 +2,7 @@
use strict;
use warnings;
use 5.00800;
-our $VERSION = '0.17';
+our $VERSION = '0.18';
use Router::Simple::SubMapper;
use Router::Simple::Route;
use List::Util qw/max/;
@@ -146,7 +146,7 @@
$router->match('/wiki/john');
# => {controller => 'WikiPage', action => 'show', page => 'john' }
-':name' notation matches C<qr{([^/]+)}>.
+':name' notation matches C<qr{([^/]+)}>, and it will be captured.
=head2 '*' notation
@@ -165,7 +165,8 @@
$router->match('/blog/2010');
# => {controller => 'Blog', action => 'yearly', year => 2010 }
-'{year}' notation matches C<qr{([^/]+)}>, and it will be captured.
+'{year}' notation matches C<qr{([^/]+)}>, and it will be captured. '{year}'
+behaves the same was as ':year'.
=head2 '{year:[0-9]+}' notation
@@ -196,7 +197,9 @@
=item $router->method_not_allowed() : Boolean
-This method returns last C<< $router->match() >> call is rejected by HTTP
method or not.
+If the last attempt to match with C<< $router->match() >> was rejected because
+the HTTP method was disallowed (as opposed to, say, not matching any routed
+paths) this method returns true.
=item $router->connect([$name, ] $pattern, \%destination[, \%options])
@@ -208,9 +211,11 @@
$router->connect( '/blog/:id', { controller => 'Blog', action => 'show' }
);
$router->connect( '/comment', { controller => 'Comment', action =>
'new_comment' }, {method => 'POST'} );
+'connect' returns the router object, so 'connect' calls can be chained.
+
C<\%destination> will be used by I<match> method.
-You can specify some optional things to C<\%options>. The current
+You can specify some optional things in C<\%options>. The current
version supports 'method', 'host', and 'on_match'.
=over 4
@@ -242,9 +247,9 @@
successful or false otherwise. The first argument is C<$env> which is
either a PSGI environment or a request path, depending on what you
pass to C<match> method; the second is the routing variables that
-would be returned if the match succeeds.
+will be returned if the match succeeds.
-The function can modify C<$env> (in case it's a reference) and
+The function can modify C<$env> (if it's a reference) and
C<$match> in place to affect which variables are returned. This allows
a wide range of transformations.
@@ -254,7 +259,7 @@
$router->submapper('/entry/', {controller => 'Entry'})
-This method is shorthand for creating new instance of
L<Router::Simple::Submapper>.
+This method is shorthand for creating new instance of
L<Router::Simple::SubMapper>.
The arguments will be passed to C<< Router::Simple::SubMapper->new(%args) >>.
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/Router-Simple-0.17/t/15_trailing_newline.t
new/Router-Simple-0.18/t/15_trailing_newline.t
--- old/Router-Simple-0.17/t/15_trailing_newline.t 1970-01-01
01:00:00.000000000 +0100
+++ new/Router-Simple-0.18/t/15_trailing_newline.t 2026-11-05
10:46:23.000000000 +0100
@@ -0,0 +1,21 @@
+use strict;
+use warnings;
+use Router::Simple;
+use Test::More;
+
+my $r = Router::Simple->new;
+$r->connect('/', { controller => 'Root' });
+$r->connect('/blog/{year:\d{4}}', { controller => 'Blog' }, { method => 'GET'
});
+$r->connect('/user/{name}', { controller => 'User' }, { host => 'example.com'
});
+
+my $env = sub { +{ PATH_INFO => $_[0], REQUEST_METHOD => $_[1] // 'GET',
HTTP_HOST => $_[2] // 'example.com' } };
+
+ok $r->match($env->('/')), 'match /';
+ok !$r->match($env->("/\n")), 'do not match a trailing newline';
+ok $r->match($env->('/blog/2014')), 'match /blog/2014';
+ok !$r->match($env->("/blog/2014\n")), 'do not match a trailing newline after
a placeholder';
+ok !$r->match($env->('/blog/2014', "GET\n")), 'do not match a trailing newline
in the method';
+ok $r->match($env->('/user/foo')), 'match /user/foo';
+ok !$r->match($env->('/user/foo', 'GET', "example.com\n")), 'do not match a
trailing newline in the host';
+
+done_testing;
++++++ _scmsync.obsinfo ++++++
mtime: 1793964905
commit: eaa65e8d5e4a4a27ef8f556e8fa91a5beaea1a7b01d522cab63553d121e92f56
url: https://src.opensuse.org/perl/perl-Router-Simple
revision: eaa65e8d5e4a4a27ef8f556e8fa91a5beaea1a7b01d522cab63553d121e92f56
projectscmsync: https://src.opensuse.org/perl/_ObsPrj
++++++ build.specials.obscpio ++++++
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/.gitignore new/.gitignore
--- old/.gitignore 1970-01-01 01:00:00.000000000 +0100
+++ new/.gitignore 2026-11-06 12:35:05.000000000 +0100
@@ -0,0 +1 @@
+.osc