Fazlin Fazlin - 4 months ago 14
Perl Question

Assign values to same variable using Getopt::Long

I was trying to write a small perl script to understand

Getopt::Long
.

Below is the script:

#!/usr/bin/perl

use strict;
use Getopt::Long;

my $op_type = "";
my @q_users;

GetOptions (
'query' => $op_type = "query",
'create' => $op_type = "create",
'modify' => $op_type = "modify",
'delete' => $op_type = "delete",
'user=s' => \@q_users
) or usage ("Invalid options.");

print "operation : $op_type\n";


When i ran this script as shown below:

$ ./all_opt.pl --query
operation : delete


I am assuming that am missing some kind of break statment in my program. I was expecting
operation : query
as the result.

Please let me know what i am missing here.

Answer

You were very close, but I think you slightly misread the Getopt::Long documentation. Any code that you want to run when an option is found needs to be in a subroutine.

#!/usr/bin/perl

use strict;
use Getopt::Long;

my $op_type = "";
my @q_users;

GetOptions (
  'query'  => sub { $op_type = 'query' },
  'create' => sub { $op_type = 'create' },
  'modify' => sub { $op_type = 'modify' },
  'delete' => sub { $op_type = 'delete' },
  'user=s' => \@q_users
) or usage ("Invalid options.");

print "operation : $op_type\n";

Note that I've just added sub { ... } around your existing $op_type = '...' code.