From owner-freebsd-questions@FreeBSD.ORG Sun Apr 8 07:03:08 2007 Return-Path: X-Original-To: freebsd-questions@freebsd.org Delivered-To: freebsd-questions@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [69.147.83.52]) by hub.freebsd.org (Postfix) with ESMTP id E6FFA16A404 for ; Sun, 8 Apr 2007 07:03:08 +0000 (UTC) (envelope-from keramida@ceid.upatras.gr) Received: from igloo.linux.gr (igloo.linux.gr [62.1.205.36]) by mx1.freebsd.org (Postfix) with ESMTP id 6665A13C448 for ; Sun, 8 Apr 2007 07:03:08 +0000 (UTC) (envelope-from keramida@ceid.upatras.gr) Received: from kobe.laptop (dialup153.ach.sch.gr [81.186.70.153]) (authenticated bits=128) by igloo.linux.gr (8.13.8/8.13.8/Debian-3) with ESMTP id l3871jUh028497 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-SHA bits=256 verify=NOT) for ; Sun, 8 Apr 2007 10:01:54 +0300 Received: from kobe.laptop (kobe.laptop [127.0.0.1]) by kobe.laptop (8.13.8/8.13.8) with ESMTP id l3871YZ1001381 for ; Sun, 8 Apr 2007 10:01:45 +0300 (EEST) (envelope-from keramida@ceid.upatras.gr) Received: (from keramida@localhost) by kobe.laptop (8.13.8/8.13.8/Submit) id l37HBKHu071287; Sat, 7 Apr 2007 20:11:20 +0300 (EEST) (envelope-from keramida@ceid.upatras.gr) Date: Sat, 7 Apr 2007 20:11:20 +0300 From: Giorgos Keramidas To: Olivier Regnier Message-ID: <20070407171120.GA70957@kobe.laptop> References: <4617B954.7010507@steelbox.org> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <4617B954.7010507@steelbox.org> X-Hellug-MailScanner: Found to be clean X-Hellug-MailScanner-SpamCheck: not spam, SpamAssassin (cached, score=-3.69, required 5, autolearn=not spam, ALL_TRUSTED -1.80, AWL 0.51, BAYES_00 -2.60, DNS_FROM_RFC_ABUSE 0.20) X-Hellug-MailScanner-From: keramida@ceid.upatras.gr X-Spam-Status: No Cc: freebsd-questions@freebsd.org Subject: Re: script perl with sed command X-BeenThere: freebsd-questions@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: User questions List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sun, 08 Apr 2007 07:03:09 -0000 On 2007-04-07 17:31, Olivier Regnier 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 = )) { | 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