trim-Funktion zum Entfernen führender und anhängender Whitespaces
authorMoritz Bunkus <m.bunkus@linet-services.de>
Fri, 1 Apr 2016 14:41:49 +0000 (16:41 +0200)
committerMoritz Bunkus <m.bunkus@linet-services.de>
Fri, 1 Apr 2016 15:20:37 +0000 (17:20 +0200)
SL/Util.pm
t/helper/trim.t [new file with mode: 0644]

index 2fdd9c1..9022d93 100644 (file)
@@ -6,7 +6,7 @@ use parent qw(Exporter);
 
 use Carp;
 
-our @EXPORT_OK = qw(_hashify camelify snakify);
+our @EXPORT_OK = qw(_hashify camelify snakify trim);
 
 sub _hashify {
   my $keep = shift;
@@ -31,6 +31,12 @@ sub snakify {
   lc $str;
 }
 
+sub trim {
+  my $value = shift;
+  $value    =~ s{^ \p{WSpace}+ | \p{WSpace}+ $}{}xg if defined($value);
+  return $value;
+}
+
 1;
 __END__
 
@@ -90,6 +96,14 @@ return C<even_worse_example>.
 
 L</camilify> does the reverse.
 
+=item C<trim $string>
+
+Removes all leading and trailing whitespaces from C<$string> and
+returns it. Whitespaces within the string won't be changed.
+
+This function considers everything matching the Unicode character
+property "Whitespace" (C<WSpace>) to be a whitespace.
+
 =back
 
 =head1 BUGS
diff --git a/t/helper/trim.t b/t/helper/trim.t
new file mode 100644 (file)
index 0000000..52b0c8d
--- /dev/null
@@ -0,0 +1,20 @@
+use Test::More tests => 11;
+
+use strict;
+use utf8;
+
+use lib 't';
+
+use SL::Util qw(trim);
+
+is(trim("hello"),               "hello",         "hello");
+is(trim("hello "),              "hello",         "hello ");
+is(trim(" hello"),              "hello",         " hello");
+is(trim(" hello "),             "hello",         " hello ");
+is(trim(" h el lo "),           "h el lo",       " h el lo ");
+is(trim("\n\t\rh\nello"),       "h\nello",       "line feed, horizontal tab, carriage return; line feed within word");
+is(trim("\x{a0}h\nello"),       "h\nello",       "non-breaking space");
+is(trim("h\nello\n\t\r"),       "h\nello",       "line feed, horizontal tab, carriage return; line feed within word");
+is(trim("h\nello\x{a0}"),       "h\nello",       "non-breaking space");
+is(trim("h\ne\x{a0}llo\x{a0}"), "h\ne\x{a0}llo", "non-breaking space within word");
+is(trim(undef),                 undef,           "undef");