I'm reading HTTP::headers code. I understand what GET mean, when only one argument, @_ becomes empty and $op will choose GET. But I can't understand PUSH and SET logic before the 2nd "?". Before receiving any value, $seen{field_name} must be empty, so what does $seen{field_name}++ mean? What's difference of PUSH and SET?
Another question is if wantarray line. I read http://perldoc.perl.org/functions/wantarray.html but didn't understand."if the context of the currently executing subroutine or eval is looking for a list value". What "the context" refers here, @old returned by $self->_header?
sub header { my $self = shift; Carp::croak('Usage: $h->header($field, ...)') unless @_; my(@old); my %seen; while (@_) { my $field = shift; my $op = @_ ? ($seen{lc($field)}++ ? 'PUSH' : 'SET') : 'GET'; @old = $self->_header($field, shift, $op); } return @old if wantarray; return $old[0] if @old <= 1; join(", ", @old); }
I delete the line about "++" to state more clear about my question.
In reply to What's this line means in HTTP::headers? by anaconda_wly
| For: | Use: | ||
| & | & | ||
| < | < | ||
| > | > | ||
| [ | [ | ||
| ] | ] |