druid has asked for the wisdom of the Perl Monks concerning the following question:

When i get my $members returned it looks like there is one white space between each username but my white space substitution to newline is failng.
#!/usr/bin/perl -w while (($name,$passwd,$gid,$members)=getgrent){ if ($name eq "steel"){ s/\w/\n/g; print "$members\n"; } }

Edit kudra, 2002-06-06 Added closing code tag, removed BR tags within code tags

Replies are listed 'Best First'.
Re: white space substitution
by Zaxo (Archbishop) on Jun 06, 2002 at 11:15 UTC

    You need to tell s/// what string to work on:

    $members =~ s/\s+/\n/g;
    Also, you didn't want \w ( any word character) to be substituted. changed to one or more whitespace

    After Compline,
    Zaxo

(MeowChow) Re: white space substitution
by MeowChow (Vicar) on Jun 06, 2002 at 11:16 UTC
    A few problems...
    #!/usr/bin/perl -w use strict; while (my ($name, $passwd, $gid, $members) = getgrent) { if ($name eq "steel"){ $members =~ s/\s/\n/g; print "$members\n"; } }
       MeowChow                                   
                   s aamecha.s a..a\u$&owag.print
Re: white space substitution
by demerphq (Chancellor) on Jun 06, 2002 at 12:03 UTC
    Well, as virtualsue and I pointed out in the CB using \s for this is probably a bad call as \s also matches \n. So you would be better off using a character class. Your pattern match isnt doing a whole lot because you are performing the substition on $_ and not on $members.

    #!/usr/bin/perl -w while (($name,$passwd,$gid,$members)=getgrent){ if ($name eq "steel"){ $members=~s/[\x20\t]/\n/g; print "$members\n"; } }
    In future please do not use pre tags. Use CODE tags and indent your script before posting. Its not such an issue with a snippet this small but for anything larger its a right pain.

    HTH :-)

    Yves / DeMerphq
    ---
    Writing a good benchmark isnt as easy as it might look.