Beefy Boxes and Bandwidth Generously Provided by pair Networks
Your skill will accomplish
what the force of many cannot

TRIM in Perl?

by peacemaker1820 (Pilgrim)
on Sep 10, 2002 at 14:00 UTC ( #196673=perlquestion: print w/ replies, xml ) Need Help??
peacemaker1820 has asked for the wisdom of the Perl Monks concerning the following question:

Hello Monks.
I would like to trim some words in my data file from the leading and trailing spaces. Let's say if I have:
$temp = " Hello ";
after doing this,
$temp =~ s/^\s+//;
that will drop all the leading and trailing spaces
This will certainly solve my problem, but I was wandering if there is a built in SUB for strings in Perl that does the same job?

Comment on TRIM in Perl?
Select or Download Code
Replies are listed 'Best First'.
Re: TRIM in Perl?
by jmcnamara (Monsignor) on Sep 10, 2002 at 14:05 UTC
Re: TRIM in Perl?
by samurai (Monk) on Sep 10, 2002 at 15:36 UTC
    No, that will NOT drop the leading and trailing spaces. Only the leading spaces (you are anchored by "^").

    There's no sub for trimming strings in perl. The best way is probably to just go ahead and bite the bullet:

    my $temp = " Hello "; $temp =~ s/^\s+//; $temp =~ s/\s+$//;

    You can write your own trim() function to automate this if you wish.

    perl: code of the samurai

      Occasionally also written as s/^\s+|\s+$//g;

      Makeshifts last the longest.

        I did some benchmarking, and I am absopositively amazed at how much faster that is than two s//'s. 3-4 times faster in my tests. Thank you very much for that one.

        perl: code of the samurai

Re: TRIM in Perl?
by charnos (Friar) on Sep 10, 2002 at 16:31 UTC
    Since with all the suggestions here we're just eliminating all spaces in the string, wouldn't simple transliteration ($temp =~ tr/ //d;) be faster/simpler?

    Update: EEK! *bangs head* Nevermind, I retract that, $temp =~ s/^\s+|\s$/ would be the best way to do it.
      Where did you see "all suggestions [..] just eliminating all spaces"? None of them do.

      Makeshifts last the longest.

Re: TRIM in Perl?
by Rabenschwinge (Novice) on Jan 12, 2011 at 10:34 UTC

    I have a problem with that one:

    #!/usr/bin/env perl use strict; use warnings; my @strings = (' Test ', 'Test 2 ', ' A ', 'multi line string ',' '); foreach my $string (@strings) { $string =~ s/^\s+//m; $string =~ s/\s+$//m; print "'$string'\n"; }


    'Test' 'Test 2' 'A' 'multi line string' ''
    That is almost correct, but it does remove a line break in the middle of the string it shouldn't: There should be two line breaks between "multi" and "line" but only one remains.

      Why do you add /m to your regular expressions? See perlop - /m changes the meaning of $ and ^.

      That is almost correct, but it does remove a line break in the middle of the string it shouldn't

      Who says it shouldn't?

      The OP wanted whitespaces removed, that is what \s means, whitespaces (\n, \r, \t, \f, and " ")

      New questions go in Seekers of Perl Wisdom (see Where should I post X?) , don't worry, yours will be moved there shortly
      I wanted the same thing I think - remove leading and trailing space, on a per line basis, ignoring newlines. I've just done this and it seems to work, i.e. linecount remains same before and after.
      cat test.dat | perl -n -e 'chomp; s/^\s+//; s/\s+$//; print "$_\n";'

Log In?

What's my password?
Create A New User
Node Status?
node history
Node Type: perlquestion [id://196673]
Approved by davis
and the web crawler heard nothing...

How do I use this? | Other CB clients
Other Users?
Others chilling in the Monastery: (6)
As of 2015-09-05 02:59 GMT
Find Nodes?
    Voting Booth?

    My preferred temperature scale is:

    Results (151 votes), past polls