From 81f5cd47023e923c63e4923ff59af80d3c9d18ea Mon Sep 17 00:00:00 2001 From: Don Armstrong <don@donarmstrong.com> Date: Thu, 29 May 2008 04:09:53 +0200 Subject: [PATCH] * Add new globify_scalar function --- Debbugs/Common.pm | 39 ++++++++++++++++++++++++++++++++++++++- 1 file changed, 38 insertions(+), 1 deletion(-) diff --git a/Debbugs/Common.pm b/Debbugs/Common.pm index 8d837291..aae0451c 100644 --- a/Debbugs/Common.pm +++ b/Debbugs/Common.pm @@ -43,7 +43,7 @@ BEGIN{ qw(getmaintainers_reverse), qw(getpseudodesc), ], - misc => [qw(make_list)], + misc => [qw(make_list globify_scalar)], date => [qw(secs_to_english)], quit => [qw(quit)], lock => [qw(filelock unfilelock @cleanups lockpid)], @@ -56,6 +56,7 @@ BEGIN{ #use Debbugs::Config qw(:globals); use Debbugs::Config qw(:config); use IO::File; +use IO::Scalar; use Debbugs::MIME qw(decode_rfc1522); use Mail::Address; use Cwd qw(cwd); @@ -457,6 +458,42 @@ sub make_list { } +=head2 globify_scalar + + my $handle = globify_scalar(\$foo); + +if $foo isn't already a glob or a globref, turn it into one using +IO::Scalar. Gives a new handle to /dev/null if $foo isn't defined. + +Will carp if given a scalar which isn't a scalarref or a glob (or +globref), and return /dev/null. May return undef if IO::Scalar or +IO::File fails. (Check $!) + +=cut + +sub globify_scalar { + my ($scalar) = @_; + my $handle; + if (defined $scalar) { + if (defined ref($scalar)) { + if (ref($scalar) eq 'SCALAR' and + not UNIVERSAL::isa($scalar,'GLOB')) { + return IO::Scalar->new($scalar); + } + else { + return $scalar; + } + } + elsif (UNIVERSAL::isa(\$scalar,'GLOB')) { + return $scalar; + } + else { + carp "Given a non-scalar reference, non-glob to globify_scalar; returning /dev/null handle"; + } + } + return IO::File->new('/dev/null','w'); +} + 1; -- 2.39.5