Why did you ignore the hint to avoid <pre>-Tags around your post?
Did you only think about the given code, or did you try it?
You also could have a look at Getopt::Long, which explains what happens, if an option doesn't have its optional argument...
Another possibility is something like this:
#! /usr/bin/perl
# vim:ts=4 sw=4 sts=4 et nu fdc=3:
use strict;
use warnings;
use Getopt::Long;
my $x = "unset";
GetOptions(
'x:s' => sub { $x = $_[1] ? $_[1] : 'true' },
) or exit 255;
print "$x\n";
It's up to you to refine the checks and values to fit your needs.
added:
$ perl /tmp/getopt.pl
unset
$ perl /tmp/getopt.pl -x
true
$ perl /tmp/getopt.pl -x foo
foo
|