+ my $oldwarn;
+ if ($params{test} || $params{ignore_unknown_options}) {
+ $oldwarn=$SIG{__WARN__};
+ $SIG{__WARN__}=sub {};
+ }
+ my $ret=Getopt::Long::GetOptionsFromArray($array, %options);
+ if ($oldwarn) {
+ $SIG{__WARN__}=$oldwarn;
+ }
+
+ foreach my $opt (@test) {
+ # Try to parse an option, and skip it
+ # if it is not known.
+ if (getoptions([$opt], %params,
+ ignore_unknown_options => 0,
+ test => 1)) {
+ getoptions([$opt], %params);
+ }
+ }
+
+ return 1 if $params{ignore_unknown_options};
+ return $ret;