X-Git-Url: https://git.dogcows.com/gitweb?a=blobdiff_plain;f=lib%2FFile%2FKDBX%2FUtil.pm;h=7d51a21cf3c81f525e18e3803825e657b4ac1bd5;hb=b0afc7004220cc502ea07ab8d2555b8fcd2a11d5;hp=2d830742e949e3730a452fc25ef6713f7d2a3d03;hpb=f63182fc62b25269b1c38588dca2b3535ed1a1a2;p=chaz%2Fp5-File-KDBX diff --git a/lib/File/KDBX/Util.pm b/lib/File/KDBX/Util.pm index 2d83074..7d51a21 100644 --- a/lib/File/KDBX/Util.pm +++ b/lib/File/KDBX/Util.pm @@ -26,7 +26,7 @@ our %EXPORT_TAGS = ( empty => [qw(empty nonempty)], erase => [qw(erase erase_scoped)], gzip => [qw(gzip gunzip)], - io => [qw(read_all)], + io => [qw(is_readable is_writable read_all)], load => [qw(load_optional load_xs try_load_optional)], search => [qw(query search simple_expression_query)], text => [qw(snakify trim)], @@ -119,13 +119,11 @@ sub can_fork { return 1; } -=func clone_nomagic - - $clone = clone_nomagic($thing); +=func clone -Clone deeply without keeping [most of] the magic. + $clone = clone($thing); -B At the moment the implementation is naïve and won't respond well to nontrivial data. +Clone deeply. This is an unadorned alias to L C. =cut @@ -134,6 +132,17 @@ sub clone { goto &Storable::dclone; } +=func clone_nomagic + + $clone = clone_nomagic($thing); + +Clone deeply without keeping [most of] the magic. + +B At the moment the implementation is naïve and won't respond well to nontrivial data or recursive +structures. + +=cut + sub clone_nomagic { my $thing = shift; if (is_arrayref($thing)) { @@ -153,7 +162,8 @@ sub clone_nomagic { =func dumper - $str = dumper $struct; + $str = dumper $thing; + dumper $thing; # in void context, prints to STDERR Like L but slightly terser in some cases relevent to L. @@ -241,7 +251,7 @@ sub erase { for (@_) { if (!is_ref($_)) { next if !defined $_ || readonly $_; - if (USE_COWREFCNT()) { + if (_USE_COWREFCNT()) { my $cowrefcnt = B::COW::cowrefcnt($_); goto FREE_NONREF if defined $cowrefcnt && 1 < $cowrefcnt; } @@ -258,7 +268,7 @@ sub erase { } elsif (is_scalarref($_)) { next if !defined $$_ || readonly $$_; - if (USE_COWREFCNT()) { + if (_USE_COWREFCNT()) { my $cowrefcnt = B::COW::cowrefcnt($$_); goto FREE_REF if defined $cowrefcnt && 1 < $cowrefcnt; } @@ -391,7 +401,7 @@ sub gunzip { return $out; } -=func gunzip +=func gzip $zipped = gzip($string); @@ -414,6 +424,20 @@ sub gzip { return $out; } +=func is_readable + +=func is_writable + + $bool = is_readable($mode); + $bool = is_writable($mode); + +Determine of an C-style mode is readable, writable or both. + +=cut + +sub is_readable { $_[0] !~ /^[aw]b?$/ } +sub is_writable { $_[0] !~ /^rb?$/ } + =func is_uuid $bool = is_uuid($thing); @@ -762,6 +786,14 @@ sub uri_escape_utf8 { return $_; } +=func uri_unescape_utf8 + + $string = uri_unescape_utf8($string); + +Inverse of L. + +=cut + sub uri_unescape_utf8 { local $_ = shift // return; s/\%([A-Fa-f0-9]{2})/chr(hex($1))/; @@ -789,7 +821,7 @@ sub uuid { BEGIN { my $use_cowrefcnt = eval { require B::COW; 1 }; - *USE_COWREFCNT = $use_cowrefcnt ? sub() { 1 } : sub() { 0 }; + *_USE_COWREFCNT = $use_cowrefcnt ? sub() { 1 } : sub() { 0 }; } ### --------------------------------------------------------------------------