From 883bd8acb647a6fd9553468fa5fa750e4f67adc6 Mon Sep 17 00:00:00 2001 From: Chad Granum Date: Thu, 30 Nov 2023 11:10:19 -0800 Subject: [PATCH] Add 'initialize' trigger for options --- lib/Getopt/Yath/Instance.pm | 16 +++++++++++++++- 1 file changed, 15 insertions(+), 1 deletion(-) diff --git a/lib/Getopt/Yath/Instance.pm b/lib/Getopt/Yath/Instance.pm index 608c6ba20..3be58e41d 100644 --- a/lib/Getopt/Yath/Instance.pm +++ b/lib/Getopt/Yath/Instance.pm @@ -168,7 +168,21 @@ sub process_args { for my $opt (@$options) { my $group = $settings->group($opt->group, 1); my $ref = $group->option_ref($opt->field, 1); - ${$ref} //= $opt->get_initial_value($settings); + unless(defined ${$ref}) { + my $val = $opt->get_initial_value($settings); + my $rt = ref($val); + if (!defined($val)) { + $val = []; + } + elsif ($rt) { + $val = [ $rt eq 'ARRAY' ? @$val : %$val ]; + } + else { + $val = [$val]; + } + $opt->trigger(action => 'initialize', ref => $ref, val => $val, state => $state, options => $self, settings => $settings, group => $group); + $opt->add_value($ref, @$val); + } $opt->init_settings($state, $settings, $group, $ref); }