From 4581f2f7f397af2b8c7d96caca6efdfd71015c03 Mon Sep 17 00:00:00 2001 From: David Golden Date: Wed, 24 Apr 2024 12:00:58 -0400 Subject: [PATCH] Improve error on spew to missing directory --- lib/Path/Tiny.pm | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/lib/Path/Tiny.pm b/lib/Path/Tiny.pm index fc8653e..c38b4de 100644 --- a/lib/Path/Tiny.pm +++ b/lib/Path/Tiny.pm @@ -2140,7 +2140,14 @@ sub spew { my $resolved_path = $self->_resolve_symlinks; my $temp = $resolved_path->_replacment_path; - my $fh = $temp->filehandle( { exclusive => 1, locked => 1 }, ">", $binmode ); + my $fh; + my $ok = eval { $fh = $temp->filehandle( { exclusive => 1, locked => 1 }, ">", $binmode ); 1 }; + if (!$ok) { + my $msg = ref($@) eq 'Path::Tiny::Error' + ? "error opening temp file '$@->{file}' for atomic write: $@->{err}" + : "error opening temp file for atomic write: $@"; + $self->_throw('spew', $self->[PATH], $msg); + } print( {$fh} map { ref eq 'ARRAY' ? @$_ : $_ } @data) or self->_throw('print', $temp->[PATH]); close $fh or $self->_throw( 'close', $temp->[PATH] );