Thread extract string (17 answers)
Opened by Graf Herschel at 2012-09-25 14:12

Linuxer
 2012-09-25 18:01
#162034 #162034
User since
2006-01-27
3890 Artikel
HausmeisterIn

user image
Hi,

Code: (dl )
$ 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:

Code (perl): (dl )
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
#! /usr/bin/perl
use strict;
use warnings;

use URI;

my $uri = URI->new("dvb://tv.mydomain.com:11300/rsat.ts");

if ( !$uri->can('host') ) {

  # treat it like a http scheme, save the old one
  my $scheme = $uri->scheme('http');
  
  print $uri->host;

  # restore old scheme
  $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!

View full thread extract string