+ if (defined $attr->{id}) {
+ defined $_->{id} or defined $_->{value} and $_->{id} = $attr->{id}.'_'.$_->{value}
+ for @options;
+ }
+ if (defined $attr->{label}) {
+ defined $_->{value} and not defined $_->{label}
+ and $_->{label} = $attr->{label}->{$_->{value}}
+ for @options;
+ delete $attr->{label};
+ }
+ if (defined $default) {
+ for (@options) {
+ $_->{checked} = 1 if defined $_->{value} and $_->{value} eq $default;
+ }
+ }
+ $_ = {%$attr, %$_} for @options;
+ my @return = map {
+ my $label = delete $_->{label};
+ defined $label && $label ne ''
+ ? '<label>'.$self->tag(input => $_)." $label</label>"
+ : $self->tag(input => $_)
+ } @options;
+ return wantarray ? @return : join('', @return);