Hi,
$ perl -MURI -wle 'my $uri = URI->new("dvb://tv.mydomain.com:11300/rsat.ts"); print $uri->host;'
Das läuft in einen Fehler, weil:
URI lädt für die verschiedenen Schemata entsprechende Module nach; z.B.
URI::http,
URI::ftp oder
URI::ldap.
Für unbekannte Schemata (wie eben hier
dvb) wird ein
URI::_foreign benutzt, welches von
URI::_generic erbt. Diese zwei stellen aber keine
host-Methode bereit. Daher wird ein entsprechender Fehler generiert.
Die
host-Methode wird von
URI::_server bereitgestellt.
Nachdem mir einige unschöne und relativ "brutale" Varianten durch den Kopf gingen, kam ich nach einem Blick in die Doku auf folgende Variante:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
use strict;
use warnings;
use URI;
my $uri = URI->new("dvb://tv.mydomain.com:11300/rsat.ts");
if ( !$uri->can('host') ) {
my $scheme = $uri->scheme('http');
print $uri->host;
$uri->scheme($scheme);
}
__END__
Ob das so 100% sauber ist, sei mal dahin gestellt. Aber auf jeden Fall sauberer als das, was mir zwischenzeitlich durch den Kopf ging ;-)
Last edited: 2012-09-25 18:02:38 +0200 (CEST)
meine Beiträge: I.d.R. alle Angaben ohne Gewähr und auf Linux abgestimmt!
Die Sprache heisst Perl, nicht PERL. - Bitte Crossposts als solche kenntlich machen!