Your regular expression: $line =~ s/ s{2,}/\t/s is converting " ss" and " ssss" to tabs and it is only converting the first one because you don't have a global flag at the end. To replace the tabs you would need s/\s\s+/\t/g or s/\s{2,}/\t/g. Note the backslash before the "s".
As for keeping the final newline, I would recommend stripping it before you apply the regex and adding it after you are done. There are ways to do that with regular expressions alone but your regular expression would be quite complicated. So the code to prep the line should look something like this:
while(my $line = <FH>) {
#strip newline
chomp $line;
#replace runs of two or more spaces with tabs
$line =~ s/\s\s+/\t/g;
#add back newline
$line .= "\n";
#.... do whatever with $line ....
}
Best, beth
-
Are you posting in the right place? Check out Where do I post X? to know for sure.
-
Posts may use any of the Perl Monks Approved HTML tags. Currently these include the following:
<code> <a> <b> <big>
<blockquote> <br /> <dd>
<dl> <dt> <em> <font>
<h1> <h2> <h3> <h4>
<h5> <h6> <hr /> <i>
<li> <nbsp> <ol> <p>
<small> <strike> <strong>
<sub> <sup> <table>
<td> <th> <tr> <tt>
<u> <ul>
-
Snippets of code should be wrapped in
<code> tags not
<pre> tags. In fact, <pre>
tags should generally be avoided. If they must
be used, extreme care should be
taken to ensure that their contents do not
have long lines (<70 chars), in order to prevent
horizontal scrolling (and possible janitor
intervention).
-
Want more info? How to link
or How to display code and escape characters
are good places to start.
|