my $caught_sigint = 0; local $SIG{INT} = sub { $caught_sigint = 1 }; foreach my $name ( @names ) { my $foo = new SUB::foo; $foo->name($name); ... last if $caught_sigint; } if ( $caught_sigint ) { die "<>\n"; }