Skip to main content
deleted 49 characters in body
Source Link
choroba
  • 1.4k
  • 9
  • 11
my %DISPATCH = (
    BOOTPROTO => sub { $_[1][1]$_[1] = '"static"';
                         $_[0] = join '=', @{ $_[1] };@_ },
    IPADDR    => sub { $_[0] = setValueForField('IPADDR', @{ $_[1] }@_); },
    NETMASK   => sub { $_[0] = setValueForField('NETMASK', @{ $_[1] }@_); },
    GATEWAY   => sub { $_[0] = setValueForField('GATEWAY', @{ $_[1] }@_); },
    DNS1      => sub { $_[0] = setValueForField('DNS1', @{ $_[1] }@_); },
    DNS2      => sub { $_[0] = setValueForField('DNS2', @{ $_[1] }@_); },
);

for my $line (@array) {
    my @fields = split /=/, $line;
    my $sub = $DISPATCH{ $fields[0] };
    $line = $sub->( $line, \@fields@fields) if $sub;
}
my %DISPATCH = (
    BOOTPROTO => sub { $_[1][1] = '"static"';
                         $_[0] = join '=', @{ $_[1] }; },
    IPADDR    => sub { $_[0] = setValueForField('IPADDR', @{ $_[1] }); },
    NETMASK   => sub { $_[0] = setValueForField('NETMASK', @{ $_[1] }); },
    GATEWAY   => sub { $_[0] = setValueForField('GATEWAY', @{ $_[1] }); },
    DNS1      => sub { $_[0] = setValueForField('DNS1', @{ $_[1] }); },
    DNS2      => sub { $_[0] = setValueForField('DNS2', @{ $_[1] }); },
);

for my $line (@array) {
    my @fields = split /=/, $line;
    my $sub = $DISPATCH{ $fields[0] };
    $sub->( $line, \@fields) if $sub;
}
my %DISPATCH = (
    BOOTPROTO => sub { $_[1] = '"static"';
                       join '=', @_ },
    IPADDR    => sub { setValueForField('IPADDR', @_) },
    NETMASK   => sub { setValueForField('NETMASK', @_) },
    GATEWAY   => sub { setValueForField('GATEWAY', @_) },
    DNS1      => sub { setValueForField('DNS1', @_) },
    DNS2      => sub { setValueForField('DNS2', @_) },
);

for my $line (@array) {
    my @fields = split /=/, $line;
    my $sub = $DISPATCH{ $fields[0] };
    $line = $sub->( @fields) if $sub;
}
edited body
Source Link
choroba
  • 1.4k
  • 9
  • 11
#!/usr/bin/perl
use strict;
use warnings;

use Getopt::Long;
use Tie::File;

my %resulthash;
my $filename;

GetOptions ("filename=s" 'filename=s' => \$filename,
            "IP=s"        => \$\$filename,
            'IP=s'       => \$resulthash{IPADDR},
            "NETMASK=s" 'NETMASK=s'  => \$resulthash{NETMASK},
            "GATEWAY=s"   => \$\$resulthash{NETMASK},
            'GATEWAY=s'  => \$resulthash{GATEWAY},
            "DNS1=s" 'DNS1=s'     => \$resulthash{DNS1},
            "DNS2=s"      => \$\$resulthash{DNS1},
            'DNS2=s'     => \$resulthash{DNS2})
or die 'Error in input values';

open my $fd, '>>', $filename
    or die "Cannot open file $filename";

tie my @array, 'Tie::File',  $filename
    or die "Cannot tie file '$filename': $!";

for my $line (@array) {
    my @fields = split /=/, $line;

    { BOOTPROTO => sub { $fields[1] = '"static"';
                         $line = join '=', @fields; },
      IPADDR    => sub { $line = setValueForField('IPADDR', @fields); },
      NETMASK   => sub { $line = setValueForField('NETMASK', @fields); },
      GATEWAY   => sub { $line = setValueForField('GATEWAY', @fields); },
      DNS1      => sub { $line = setValueForField('DNS1', @fields); },
      DNS2      => sub { $line = setValueForField('DNS2', @fields); },
    }->{ $fields[0] }->();
}

untie @array;

addMissingValues(\%resulthash);

close $fd;

sub addMissingValues {
    my $hash = shift;

    while (my ($key, $value) = each %$hash) {
        createNewField($key, $value) if defined $value;
    }
}

sub createNewField {
    my ($key, $value) = @_;
    print {$fd} join '=', $key, $value;
    print {$fd} "\n";
}

sub setValueForField {
    my ($fieldname, @fields) = @_;

    $fields[1] = $resulthash{$fieldname};

    return join '=', @fields;
}
#!/usr/bin/perl
use strict;
use warnings;

use Getopt::Long;
use Tie::File;

my %resulthash;
my $filename;

GetOptions ("filename=s"  => \$filename,
            "IP=s"        => \$resulthash{IPADDR},
            "NETMASK=s"   => \$resulthash{NETMASK},
            "GATEWAY=s"   => \$resulthash{GATEWAY},
            "DNS1=s"      => \$resulthash{DNS1},
            "DNS2=s"      => \$resulthash{DNS2})
or die 'Error in input values';

open my $fd, '>>', $filename
    or die "Cannot open file $filename";

tie my @array, 'Tie::File',  $filename
    or die "Cannot tie file '$filename': $!";

for my $line (@array) {
    my @fields = split /=/, $line;

    { BOOTPROTO => sub { $fields[1] = '"static"';
                         $line = join '=', @fields; },
      IPADDR    => sub { $line = setValueForField('IPADDR', @fields); },
      NETMASK   => sub { $line = setValueForField('NETMASK', @fields); },
      GATEWAY   => sub { $line = setValueForField('GATEWAY', @fields); },
      DNS1      => sub { $line = setValueForField('DNS1', @fields); },
      DNS2      => sub { $line = setValueForField('DNS2', @fields); },
    }->{ $fields[0] }->();
}

untie @array;

addMissingValues(\%resulthash);

close $fd;

sub addMissingValues {
    my $hash = shift;

    while (my ($key, $value) = each %$hash) {
        createNewField($key, $value) if defined $value;
    }
}

sub createNewField {
    my ($key, $value) = @_;
    print {$fd} join '=', $key, $value;
    print {$fd} "\n";
}

sub setValueForField {
    my ($fieldname, @fields) = @_;

    $fields[1] = $resulthash{$fieldname};

    return join '=', @fields;
}
#!/usr/bin/perl
use strict;
use warnings;

use Getopt::Long;
use Tie::File;

my %resulthash;
my $filename;

GetOptions ('filename=s' => \$filename,
            'IP=s'       => \$resulthash{IPADDR},
            'NETMASK=s'  => \$resulthash{NETMASK},
            'GATEWAY=s'  => \$resulthash{GATEWAY},
            'DNS1=s'     => \$resulthash{DNS1},
            'DNS2=s'     => \$resulthash{DNS2})
or die 'Error in input values';

open my $fd, '>>', $filename
    or die "Cannot open file $filename";

tie my @array, 'Tie::File',  $filename
    or die "Cannot tie file '$filename': $!";

for my $line (@array) {
    my @fields = split /=/, $line;

    { BOOTPROTO => sub { $fields[1] = '"static"';
                         $line = join '=', @fields; },
      IPADDR    => sub { $line = setValueForField('IPADDR', @fields); },
      NETMASK   => sub { $line = setValueForField('NETMASK', @fields); },
      GATEWAY   => sub { $line = setValueForField('GATEWAY', @fields); },
      DNS1      => sub { $line = setValueForField('DNS1', @fields); },
      DNS2      => sub { $line = setValueForField('DNS2', @fields); },
    }->{ $fields[0] }->();
}

untie @array;

addMissingValues(\%resulthash);

close $fd;

sub addMissingValues {
    my $hash = shift;

    while (my ($key, $value) = each %$hash) {
        createNewField($key, $value) if defined $value;
    }
}

sub createNewField {
    my ($key, $value) = @_;
    print {$fd} join '=', $key, $value;
    print {$fd} "\n";
}

sub setValueForField {
    my ($fieldname, @fields) = @_;

    $fields[1] = $resulthash{$fieldname};

    return join '=', @fields;
}
added 819 characters in body
Source Link
choroba
  • 1.4k
  • 9
  • 11

You can also keep the dispatch table outside of the loop, but you need to pass parameters to the callbacks.

my %DISPATCH = (
    BOOTPROTO => sub { $_[1][1] = '"static"';
                         $_[0] = join '=', @{ $_[1] }; },
    IPADDR    => sub { $_[0] = setValueForField('IPADDR', @{ $_[1] }); },
    NETMASK   => sub { $_[0] = setValueForField('NETMASK', @{ $_[1] }); },
    GATEWAY   => sub { $_[0] = setValueForField('GATEWAY', @{ $_[1] }); },
    DNS1      => sub { $_[0] = setValueForField('DNS1', @{ $_[1] }); },
    DNS2      => sub { $_[0] = setValueForField('DNS2', @{ $_[1] }); },
);

for my $line (@array) {
    my @fields = split /=/, $line;
    my $sub = $DISPATCH{ $fields[0] };
    $sub->( $line, \@fields) if $sub;
}

You can also keep the dispatch table outside of the loop, but you need to pass parameters to the callbacks.

my %DISPATCH = (
    BOOTPROTO => sub { $_[1][1] = '"static"';
                         $_[0] = join '=', @{ $_[1] }; },
    IPADDR    => sub { $_[0] = setValueForField('IPADDR', @{ $_[1] }); },
    NETMASK   => sub { $_[0] = setValueForField('NETMASK', @{ $_[1] }); },
    GATEWAY   => sub { $_[0] = setValueForField('GATEWAY', @{ $_[1] }); },
    DNS1      => sub { $_[0] = setValueForField('DNS1', @{ $_[1] }); },
    DNS2      => sub { $_[0] = setValueForField('DNS2', @{ $_[1] }); },
);

for my $line (@array) {
    my @fields = split /=/, $line;
    my $sub = $DISPATCH{ $fields[0] };
    $sub->( $line, \@fields) if $sub;
}
Source Link
choroba
  • 1.4k
  • 9
  • 11
Loading