2017-08-29 11 views
-1

からファイルを開いて、私は別のスレッド上で、次の答えを見つけました:これは完璧に動作Perlは:私はURLではなくローカルファイルからファイルを開く方法を知りたいと思ったURL

use IO::String; 
my $handle = IO::String->new(get("google.com")); 
my @lines = <$handle>;      
close $handle; 

.. 。私のPCで...

しかし、コードを私のホストされているサーバーに転送すると、IOモジュールが見つからないという不満があります。それで、URLからファイルを開く別の方法があります。外部モジュールは必要ありません(または、すべてのサーバーにインストールされているものを使用します)...?

+0

モジュール 'IO :: String'は非常に特定の機能を提供します。あなたはそれが本当に必要なのですか? 「URLからファイルを開く_」とはどういう意味ですか?ファイル形式の操作を使用する特別な理由はありますか?インターネットからコンテンツを取得して管理するには、さまざまな方法があります。あなたは正確に何をする必要がありますか? – zdim

+0

私はこの質問を再開しました。それは確かに人々が提案した質問の重複ではありません。解決策を探す際にOPが間違った軌道に乗ったように見えるので、重複しているように見えます。 –

+0

'my $ handle = IO :: String-> new(get(" google.com "));私の@lines = <$handle>; 'はまったく無意味です。 –

答えて

4

「URLからファイルを開く」方法はありません。さて、あなたはLWP :: UserAgentのprogress()コールバックを使って何かを一緒に投げることができると思うが、それでもあなたが望むように動作するとは思わない。

しかし、あなたはかなり簡単にしたいように見えるものを作ることができます。実際に、私たちが実際にやっていることは、URLからすべてのデータを取り戻し、そのデータを含む文字列でファイルハンドルを開くことです。

use LWP::Simple; 

my $data = get('https://google.com'); 
open my $url_fh, '<', \$data or die $!; 

# Now $url_fh is a filehandle wrapped around your data. 
# Treat it like any other filehandle. 

while (<$url_fh>) { 
    print; 
} 

IO :: Stringがインストールされていないという問題がありました。しかし、標準的なPerlの機能(単に文字列への参照でファイルハンドルを開く)をするだけで簡単にできるので、インストールする必要はありません。

更新:ここで、IO :: Stringは完全に不要です。文字列への参照でファイルハンドルを開くだけでなく、Webサイトからファイルを配列に読み込むだけで簡単にできるようになるためです。その場合、コードは次のようになります。

use LWP::Simple; 

my $url = 'something'; 
my @records = split /\n/, get($url); 

エラーハンドリングを追加することも考えられます。

use LWP::Simple; 

my $url = 'something'; 
my $data = get($url); 
die "No data found\n" unless defined $data; 
my @array = split /\n/, get($url); 
+2

実際、LEONTは数年前にhttps://metacpan.org/pod/PerlIO::httpを書いています。これにより、単にURLを開くことができます。しかしOPには、共有ホスティングにインストールされていないものがあります。 – simbabque

+0

おかげで、それは私が必要としていることを行い、IO:文字列の問題を取り除きます – jxm

5

あなたはあなたのopen経由でURLからファイルハンドルを開くための入力層を与えるPerlIO::httpを、インストールすることができます。これはPerlコアには含まれていませんが、will work with Perls as early as 5.8.9です。

インストールしたら、モード引数に:httpのレイヤーを持つopenを実行するだけで済みます。 useには何もありません。それは自動的に起こります。

open my $fh, '<:http', 'https://metacpan.org/recent'; 

通常のファイルのように$fhから読み取ることができます。フードの下では、データをワイヤで処理することに注意します。

while (my $line = <$fh>) { ... } 
関連する問題