NAME
String::Tools - Various tools for manipulating strings.
SYNOPSIS
use String::Tools qw(
define
is_blank
shrink
stitch
stitcher
stringify
subst
subst_vars
trim
trim_lines
);
my $val = define undef; # ''
say is_blank(undef); # 1 (true)
say is_blank(''); # 1 (true)
say is_blank("\t\n\0"); # 1 (true)
say is_blank("0"); # '' (false)
say shrink(" This is a test\n"); # 'This is a test'
## stitch ##
say stitch( qw(This is a test) ); # "This is a test"
say stitch(
qw(This is a test), "\n",
qw(of small proportions)
); # "This is a test\nof small proportions"
# Format some other language in a more readable format,
# yet keep the resulting string small for transport across the network.
say stitch(qw(
SELECT *
FROM table
WHERE foo = ?
AND bar = ?
));
# "SELECT * FROM table WHERE foo = ? AND bar = ?"
## subst ##
my $date = 'Today is ${ day } of $month, in the year $year';
say subst( $date, day => '15th', month => 'August', year => 2013 );
# OR
say subst( $date, { day => '15th', month => 'August', year => 2013 } );
# OR
say subst( $date, [ day => '15th', month => 'August', year => 2013 ] );
my $lookfor = 'The thing you're looking for is $_.';
say subst( $lookfor, 'this' );
say 'No, wait! ', subst( $lookfor, _ => 'that' );
say trim(" This is a test\n"); # 'This is a test'
# Describe what to trim:
say trim(" This is a test\n",
l => '\s+', r => '\n+'); # 'This is a test'
DESCRIPTION
String::Tools
is a collection of tools to manipulate strings.
VARIABLES
$BLANK
The default regular expression character class to determine if a string component is blank. Defaults to [[:cntrl:][:space:]]
. Used in "is_blank( $string = $_ )", "shrink( $string = $_ )", "stitch( @list )", and "trim( $string = $_ ; $l = qr/$BLANK+/ ; $r = $l )".
$SUBST_VAR
The regular expression for the "subst( $string ; %variables = ( _ => $_ ) )" function. Starts with an alphabetic or underscore character, continues with any number of word characters, and then is followed by any number of subpatterns that begin with a single punctuation character and is followed by one or more word characters.
If you want to change it for a particular use, it is highly recomended that you local
'ize your change.
$THREAD
The default thread to use while stitching a string together. Defaults to a single space, ' '
. Used in "shrink( $string = $_ )" and "stitch( @list )".
FUNCTIONS
define( $scalar = $_ )
Returns $scalar
if it is defined, or a defined but false value (which works in a numeric or string context) if it's undefined. Useful in avoiding the 'Use of uninitialized value' warnings. $scalar
defaults to $_
if not specified.
is_blank( $string = $_ )
Return true if $string
is blank. A blank $string
is undefined, the empty string, or a string that conisists entirely of "$BLANK" characters. $string
defaults to $_
if not specified.
shrink( $string = $_ )
Trim $BLANK
characters from that lead and rear of $string
, then combine multiple consecutive $BLANK
characters into one $THREAD
character throughout $string
. $string
defaults to $_
if not specified.
stitch( @list )
Stitch together the elements of list with "$THREAD". If an item in @list
is blank (as measured by "is_blank( $string = $_ )"), then the item is stitched without "$THREAD".
This approach is more intuitive than join
:
say join( ' ' => qw( 1 2 3 ... ), "\n", qw( Can anybody hear? ) );
# "1 2 3 ... \n Can anybody hear?"
say join( ' ' => qw( 1 2 3 ... ) );
say join( ' ' => qw( Can anybody hear? ) );
# "1 2 3 ...\nCan anybody hear?"
#
say stitch( qw( 1 2 3 ... ), "\n", qw( Can anybody hear? ) );
# "1 2 3 ...\nCan anybody hear?"
say join( ' ' => $user, qw( home dir is /home/ ), $user );
# "$user home dir is /home/ $user"
say join( ' ' => $user, qw( home dir is /home/ ) ) . $user;
# "$user home dir is /home/$user"
#
say stitch( $user, qw( home dir is /home/ ), '', $user );
# "$user home dir is /home/$user"
stitcher( $thread => @list )
Stitch together the elements of @list
with $thread
in place of "$THREAD".
say stitcher( ' ' => qw( 1 2 3 ... ), "\n", qw( Can anybody hear? ) );
# "1 2 3 ...\nCan anybody hear?"
say stitcher( ' ' => $user, qw( home dir is /home/ ), '', $user );
# "$user home dir is /home/$user"
stringify( $scalar = $_ )
Return an intelligently stringified version of $scalar
. Attempts to avoid returning a string that has the reference name and a hexadecimal number: ARRAY(0xdeadbeef)
, My::Package=HASH(0xdeadbeef)
.
If $scalar
is undefined, returns the result from "define( $scalar = $_ )". If $scalar
is not a reference, returns $scalar. If $scalar
is a reference to an ARRAY
, returns the stringification of that array (via "@$scalar"
). If $scalar
is a reference to a HASH
, returns the stringification of that hash (via "@{[%$scalar]}"
). If $scalar
is a reference to a SCALAR
, calls itself as stringify($$scalar)
. If $scalar
is a reference that is not one of the previously mentioned, returns the default stringification (via "$scalar"
).
Since v0.18.277
subst( $string ; %variables = ( _ => $_ ) )
Take in $string
, and do a search and replace of all the variables named in %variables
with the associated values.
The %variables
parameter can be a hash, hash reference, array reference, list, scalar, or empty. The single scalar is treated as if the name is the underscore. The empty case is handled by using underscore as the name, and $_
as the value.
If you really want to replace nothing in the string, then pass in an empty hash reference or empty array reference, as an empty hash or empty list will be treated as the empty case.
Only names which are in %variables
will be replaced. This means that substitutions that are in $string
which are not mentioned in %variables
are simply ignored and left as is.
The names in %variables
to be replaced in $string
must follow a pattern. The pattern is available in variable "$SUBST_VAR
".
Returns the string with substitutions made.
subst_vars( $string = $_ )
Search $string
for things that look like variables to be substituted.
Returns the unique list of variable names found, without the leading $
or surrounding {}
.
my $string = 'Name is $name, age is $age, birthday is ${ birthday }';
my @vars = subst_vars($string); # 'name', 'age', 'birtday'
trim( $string = $_ ; $l = qr/$BLANK+/ ; $r = $l )
Trim string
of leading and trailing characters. $string
defaults to $_
if not specified. The paramters l
(lead) and r
(rear) are both optional, and can be specified positionally, or as key-value pairs. If l
is undefined, the default pattern is /$BLANK+/
, matched at the beginning of the string. If r
is undefined, the default pattern is the value of l
, matched at the end of the string.
If you don't want to trim the start or end of a string, set the corresponding parameter to the empty string ''
.
say foreach map trim, @strings;
say trim(' This is a test ')
# 'This is a test'
say trim('--This is a test==', qr/-/, qr/=/);
# '-This is a test='
say trim(' This is a test!!', r => qr/[.?!]+/, l => qr/\s+/);
# 'This is a test'
trim_lines( $string = $_ ; $l = qr/$BLANK+/ ; $r = $l )
Similar to "trim( $string = $_ ; $l = qr/$BLANK+/ ; $r = $l )", except it does it for each line in a string, not just the start and end of a string.
say trim_lines("\t This \n\n \t is \n\n \t a \n\n \t test \t\n\n")
# "This\nis\na\ntest"
say trim_lines( "\t\tThis\n\t\tis\n\t\ta\n\t\ttest", qr/\t/ );
# "\tThis\n\tis\n\ta\n\ttest"
Since v0.18.270.
BUGS
Please report any bugs or feature requests on the bugtracker website https://github.com/rkleemann/String-Tools/issues
When submitting a bug or request, please include a test-file or a patch to an existing test-file that illustrates the bug or desired feature.
TODO
Nothing?
SEE ALSO
"join" in perlfunc, Any templating system.
VERSION
version 0.18.279
AUTHOR
Bob Kleemann <bobk@cpan.org>
COPYRIGHT AND LICENSE
This software is Copyright (c) 2014-2018 by Bob Kleemann.
This is free software, licensed under:
The Artistic License 2.0 (GPL Compatible)