Movatterモバイル変換


[0]ホーム

URL:


Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings
/perl5Public

defer/finally block with caught exception exits current runops loop #23064

Closed
Assignees
leonerd
@djerius

Description

@djerius

Description
When calling a subroutine which usesType::Params::signature inside of adefer block, the process will stop without warning if a multiple signature match is made and the successful match is against the second or later alternate.

Steps to Reproduce

To reproduce the issue, run the following script with the environment variableBUG set to 3.

SettingBUG to 1 or 2 illustrates thatType::Params::signature works in the case that a single signature is available to be matched, or the first alternative in a multiple signature matches.

#! /bin/env perluse v5.40;no warnings "experimental::defer";use feature 'defer';use Type::Params 'signature';use Types::Standard qw( Any );my @sig = (    # works    signature( named => [ inst_id => Any ] ),    # works; the first signature matches    signature( multiple => [{ named => [ inst_id => Any ] },{ named => [ tag => Any ] },    ] ),    # fails; the second signature matches    signature( multiple => [{ named => [ tag => Any ] },{ named => [ inst_id => Any ] },    ] ),);for my $id ( 0 ..1 ) {    say STDERR "LOOP: $id";    defer {$ENV{BUG} && $sig[ $ENV{BUG} - 1 ]->( inst_id => 0, );say STDERR "DEFER: $id";    }    say STDERR "PRE-DEFER: $id";}

For example,

$ BUG=1 perl bug.plLOOP: 0PRE-DEFER: 0DEFER: 0LOOP: 1PRE-DEFER: 1DEFER: 1$ BUG=2 perl bug.plLOOP: 0PRE-DEFER: 0DEFER: 0LOOP: 1PRE-DEFER: 1DEFER: 1$ BUG=3 perl bug.plLOOP: 0PRE-DEFER: 0DEFER: 0

If thedefer keyword is removed (retaining the code block), the correct output is obtained forBUG=3


Flags

  • category=core
  • severity=high

Perl configuration

Site configuration information for perl 5.40.0:Configured by dj at Mon Aug  5 00:44:06 EDT 2024.Summary of my perl5 (revision 5 version 40 subversion 0) configuration:     Platform:    osname=linux    osvers=6.9.7+bpo-amd64    archname=x86_64-linux    uname='linux leafhopper 6.9.7+bpo-amd64 #1 smp preempt_dynamic debian 6.9.7-1~bpo12+1 (2024-07-03) x86_64 gnulinux '    config_args='-Dprefix=/home/dj/.plenv/versions/5.40 -de -Dversiononly -A'eval:scriptdir=/home/dj/.plenv/versions/5.40/bin''    hint=recommended    useposix=true    d_sigaction=define    useithreads=undef    usemultiplicity=undef    use64bitint=define    use64bitall=define    uselongdouble=undef    usemymalloc=n    default_inc_excludes_dot=define  Compiler:    cc='cc'    ccflags ='-fwrapv -fno-strict-aliasing -pipe -fstack-protector-strong -I/usr/local/include -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64 -D_FORTIFY_SOURCE=2'    optimize='-O2'    cppflags='-fwrapv -fno-strict-aliasing -pipe -fstack-protector-strong -I/usr/local/include'    ccversion=''    gccversion='12.2.0'    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='cc'    ldflags =' -fstack-protector-strong -L/usr/local/lib'    libpth=/usr/local/lib /usr/lib/x86_64-linux-gnu /usr/lib /usr/lib64    libs=-lpthread -ldl -lm -lcrypt -lutil -lc    perllibs=-lpthread -ldl -lm -lcrypt -lutil -lc    libc=/lib/x86_64-linux-gnu/libc.so.6    so=so    useshrplib=false    libperl=libperl.a    gnulibc_version='2.36'  Dynamic Linking:    dlsrc=dl_dlopen.xs    dlext=so    d_dlsymun=undef    ccdlflags='-Wl,-E'    cccdlflags='-fPIC'    lddlflags='-shared -O2 -L/usr/local/lib -fstack-protector-strong'---@INC for perl 5.40.0:    /home/dj/.plenv/versions/5.40/lib/perl5/site_perl/5.40.0/x86_64-linux    /home/dj/.plenv/versions/5.40/lib/perl5/site_perl/5.40.0    /home/dj/.plenv/versions/5.40/lib/perl5/5.40.0/x86_64-linux    /home/dj/.plenv/versions/5.40/lib/perl5/5.40.0---Environment for perl 5.40.0:    HOME=/home/dj    LANG=en_US.UTF-8    LANGUAGE (unset)    LD_LIBRARY_PATH (unset)    LOGDIR (unset)    PATH=/home/dj/.plenv/versions/5.40/bin:/home/dj/.plenv/libexec:/home/dj/.plenv/plugins/perl-build/bin:/home/dj/.plenv/plugins/pexec/bin:/home/dj/.plenv/plugins/plenv-contrib/bin:/home/dj/.cargo/bin:/home/dj/.plenv/shims:/home/dj/.plenv/bin:/home/dj/bin:/home/dj/.local/bin:/home/dj/.cargo/bin:/home/dj/miniconda3/condabin:/home/dj/.plenv/shims:/home/dj/.plenv/bin:/home/dj/bin:/home/dj/.local/bin:/home/dj/.plenv/shims:/home/dj/.plenv/bin:/home/dj/bin:/usr/local/bin:/usr/bin:/bin:/usr/local/games:/usr/games:/home/dj/root/lua/bin:/home/dj/root/lua/bin    PERL_BADLANG (unset)    PERL_CPANM_OPT=--cascade-search --mirror-only  --mirror /home/dj/Work/darkpan --mirror http://www.cpan.org    PERL_CPAN_MIRROR_TINY_BASE=/home/dj/Work/darkpan    PERL_DARKPAN=/home/dj/Work/darkpan    SHELL=/bin/bash

Metadata

Metadata

Assignees

Type

No type

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions


    [8]ページ先頭

    ©2009-2025 Movatter.jp