¿Has probado a sacar un volcado de $b?
Debería salir un objeto HTTP::Headers.
Según el manual de
HTTP::Proxy::HeaderFilter , $b guarda un objeto HTTP::Headers, que son las cabeceras que el filtro enviará al cliente en caso de que el proxy esté en el lado de la respuesta, o lo enviará al servidor, si está en el lado de la consulta (como creo que es tu caso). Entonces, el proxy puede modificar esas cabeceras cuando pasan a través de él.
En cambio, $c contiene un objeto HTTP::Response (si estamos filtrando la respuesta) o un objeto HTTP::Request (si estamos filtrando la consulta). De este último, quieres obtener el 'user-agent'. Bueno, no sé el porqué no te funciona el método header(). Según el manual de HTTP::Request, debería ser así. Y se ve en el volcado que sí que está.
Con este programa de una línea, se demuestra que sí se puede acceder a esa cabecera:
Using text Syntax Highlighting
perl -MData::Dumper -MHTTP::Request::Common -E '$req = GET "http://perlenespanol.com", User_Agent => "Mi Agente"; say Dumper $req; say $req->header("user-agent")'
$VAR1 = bless( {
'_content' => '',
'_uri' => bless( do{\(my $o = 'http://perlenespanol.com')}, 'URI::http' ),
'_headers' => bless( {
'user-agent' => 'Mi Agente'
}, 'HTTP::Headers' ),
'_method' => 'GET'
}, 'HTTP::Request' );
Mi Agente
Coloreado en 0.000 segundos, usando
GeSHi 1.0.8.4
Lo que hacemos es crear un objeto HTTP::Request, con solo la URL y una cabecera User-Agent inventada. Luego hacemos un volcado para ver el contenido, y luego accedemos directamente al valor de esa cabecera.
(Nota: si te fijas, da igual escribirlo en minúsculas/mayúsculas o si el guión es bajo o medio. HTTP::Headers se ocupa de eso)
Así que no sé qué es lo que te pasa...