Beefy Boxes and Bandwidth Generously Provided by pair Networks
Welcome to the Monastery
 
PerlMonks  

Re: How to replace Tab with spaces not altering postion

by petral (Curate)
on Oct 10, 2002 at 15:11 UTC ( #204199=note: print w/ replies, xml ) Need Help??


in reply to How to replace Tab with spaces not altering postion

> perldoc -q tabs Found in /usr/local/lib/perl5/5.6.1/pod/perlfaq4.pod How do I expand tabs in a string? You can do it yourself: 1 while $string =~ s/\t+/' ' x (length($&) * 8 - length($`) % 8)/e; Or you can just use the Text::Tabs module (part of the standard +perl distribution). use Text::Tabs; @expanded_lines = expand(@lines_with_tabs); >
and this from perlop:
Occasionally, you can't use just a `/g' to get all the changes to occur that you might want. Here are two common cases: # put commas in the right places in an integer 1 while s/(\d)(\d\d\d)(?!\d)/$1,$2/g; # expand tabs to 8-column spacing 1 while s/\t+/' ' x (length($&)*8 - length($`)%8)/e;
And this has been in the perl man page since perl1!
print "\et" x ($tab/8), ' ' x ($tab%8); # tab over


  p


Comment on Re: How to replace Tab with spaces not altering postion
Select or Download Code
Re^2: How to replace Tab with spaces not altering postion
by Aristotle (Chancellor) on Oct 11, 2002 at 21:45 UTC

    The problem is it's using $` which incurs a huge performance penalty.

    Here's another OWTDI:

    $_ = join "", map { $_ . " " x (8 - length() % 8) } split /\t/, $_, -1;
    Update: blakem points out that this code is broken. It will pad all parts of the string to a multiple of 8, including the last one. Getting it not to is disappointingly awkward..
    $_ = join "", do { my @bits = split /\t/, $_, -1; (map { $_ . " " x (8 - length() % 8) } @bits[0..$#bits-1]), $bits[ +-1] };
    (Update is untested.)

    Makeshifts last the longest.

      join "", map{ $_ . (/\n/ ? "" : " " x (8 - length() & 7)) } split /\t/
      ?

        p
        $_ = "You\tare\tmaking\ttoo\tmany\tassumptions...";

        Makeshifts last the longest.

Log In?
Username:
Password:

What's my password?
Create A New User
Node Status?
node history
Node Type: note [id://204199]
help
Chatterbox?
and the web crawler heard nothing...

How do I use this? | Other CB clients
Other Users?
Others having an uproarious good time at the Monastery: (6)
As of 2015-07-02 23:26 GMT
Sections?
Information?
Find Nodes?
Leftovers?
    Voting Booth?

    The top three priorities of my open tasks are (in descending order of likelihood to be worked on) ...









    Results (47 votes), past polls