Giorgos Keramidas a écrit :
On 2007-04-07 17:31, Olivier Regnier <[EMAIL PROTECTED]> wrote:
Hello,
I have a problem with my perl script with the command sed. Here is a
example of my code:

Don't use system("sed ...") in Perl.  It's considered poor style, since
Perl can do the same without having to fork a shell/sed process.

# Selecting the fast server
print "Using the server called $server";
system(`/usr/bin/sed 's|\*default host=\(.*\)|\*default host=${server}|' $standard_supfile > $standard_supfile.copy`);
system('/bin/mv $standard_supfile.copy $standard_supfile');

Try using Perl only, instead of forking sed(1), like this:

,-----------------------------------------------------------------------
|
| #!/usr/bin/perl -Tw
|
| use strict;
|
| #
| # supfile_set_default_host($supfile, $newhost)
| #       Set the default host used by the supfile $supfile to the
| #       host name supplied as $newhost.
| #
|
| sub supfile_set_default_host($$);
| sub supfile_set_default_host($$)
| {
|     my $tmpsupfile;
|     my $supfile = shift;
|     my $newhost = shift;
|
|     if (!defined($supfile) || !defined($newhost)) {
|         return undef;
|     }
|
|     $tmpsupfile = "tmp-" . $supfile;
|     open(SUP, "$supfile") or die "$!";
|     open(TMP, "> $tmpsupfile") or die "$!";
|
|     my $line;
|     while (defined($line = <SUP>)) {
|         chomp $line;
|         $line =~ s/^(\*[ \t]*default[ \t][ \t]*host[ \t]*=).*/$1${newhost}/;
|         print TMP "$line\n";
|     }
|     close(TMP) or die "$!";
|     close(SUP) or die "$!";
|     rename("$tmpsupfile", "$supfile") or die "$!";
|     return 1;
| }
|
| supfile_set_default_host('standard-supfile', 'cvsup.example.net');
|
`-----------------------------------------------------------------------

This is slightly more complex than forking a sed(1) utility run, but
it's easier to understand (at least it is for me).

A very brief run of the script seems to work here:

,-----------------------------------------------------------------------
|
| $ pwd
| /tmp
| $ cp /usr/share/examples/cvsup/standard-supfile .
| $ grep 'default host' standard-supfile
| *default host=CHANGE_THIS.FreeBSD.org
| $ perl -Tw supfile.pl
| $ grep 'default host' standard-supfile
| *default host=cvsup.keramida
| $
|
`-----------------------------------------------------------------------

- Giorgos

Hello and thanks for this perl script. I'm new in perl and when i test him, i have an error that says:
No such file or directory at myscript.pl line 18

line 18 = open(TMP, "> $tmpsupfile") or die "$!";

#!/usr/bin/perl -Tw

use strict;

#
# supfile_set_default_host($supfile, $newhost)
#       Set the default host used by the supfile $supfile to the
#       host name supplied as $newhost.
#

sub supfile_set_default_host($$);
sub supfile_set_default_host($$)
{
    my $tmpsupfile;
    my $supfile = "/etc/standard-supfile";
    my $newhost = "cvsup.fr.freebsd.org";

    if (!defined($supfile) || !defined($newhost)) {
        return undef;
    }

    $tmpsupfile = "tmp-" . $supfile;
    open(SUP, "$supfile") or die "$!";
    open(TMP, "> $tmpsupfile") or die "$!";

    my $line;
    while (defined($line = <SUP>)) {
        chomp $line;
        $line =~ s/^(\*[ \t]*default[ \t][ \t]*host[ \t]*=).*/$1${newhost}/;
        print TMP "$line\n";
    }
    close(TMP) or die "$!";
    close(SUP) or die "$!";
    rename("$tmpsupfile", "$supfile") or die "$!";
    return 1;
}

supfile_set_default_host('standard-supfile', 'cvsup.example.net');


Thanks again for your help.
_______________________________________________
freebsd-questions@freebsd.org mailing list
http://lists.freebsd.org/mailman/listinfo/freebsd-questions
To unsubscribe, send any mail to "[EMAIL PROTECTED]"

Reply via email to