トップページ⇒php
1001コメント404KB

Perlコーディング初心者質問スレ Part 60

■ このスレッドは過去ログ倉庫に格納されています
0001nobodyさん2009/09/03(木) 23:51:12ID:???
Perlのコーディングで困ってる人のスレです。

【投稿する際の注意】
質問するときは内容をよく吟味してから投稿してください。
「コマンドの意味がわかんない」とかはマニュアル見ましょう。
回答者さんは何でも屋じゃありません。

1: 自分はこういう事がしたい。
2: それでこんな風にやってみたが・・・
3: こんなエラーが出て上手く行かなかった。

最低でも1と3が無いと誰も答えられないよ。
良い回答は良い質問から。一緒に勉強しましょう。

お勧めサイトは >2 以降

前スレ http://pc11.2ch.net/test/read.cgi/php/1234752149/
0666nobodyさん2010/03/09(火) 16:30:28ID:???
>>665
$ftps=>getの行の上に
print $file, "debug print¥n";
してみりゃ、原因わかるんじゃね?
06676652010/03/09(火) 16:47:08ID:IYkocy7W
>>666
ヒントありがとうございます。
Windowsといえば改行コードだと閃いて、以下一行追加したら正常に動きました。

@files = map { s/\r//g; $_ } @files;
0668nobodyさん2010/03/09(火) 16:51:36ID:???
chompじゃ駄目なのか
06696652010/03/09(火) 23:23:47ID:???
chompは確か最初か2番目くらいに試したけどダメでした。
試した事を書くのすっかり忘れてました・・・すみません。
ちなみに
 ○ @files = map { s/\r//g; $_ } @files;
 × @files = map { s/\n//g; $_ } @files;
 × @files = map { s/\r\n//g; $_ } @files;
でした。なんだかよく分かりません・・・
0670nobodyさん2010/03/10(水) 02:09:38ID:???
多分\r\nから\rが消えて、実質\r\n→\nの置換になってるから上手く行ったんじゃないか?
0671nobodyさん2010/03/10(水) 02:13:37ID:???
chompして\nつけるのが正しいやり方では
06726652010/03/10(水) 12:22:41ID:???
色々試してみました。

○ $file =~ s/\r//g;
○ $file =~ s/\r$//g;
× $file =~ s/\r\n//g;
× $file =~ s/\n//g;
× chomp $file;
   $file .= "\n";

× @files = map { s/\r\n/\n/g; $_ } @files;
× @files = map { s/\r\n/\n/g; $_ } @files;
   chomp $file;

○ @files = map { s/\r/\n/g; $_ } @files;
   chomp $file;

どうやら配列には、\rだけが入ってるようです。(\r\nでも\nでもなく)
で、chompは\rを処理しないということでしょうか。
ちなみにNet::FTPでmy @files = $ftp->ls()した場合は、こういう改行コードの問題は起きません。
推測ですが、$ftp->ls()は改行処理してるけど$ftps->nlst()はしてなくて、
ActivePerlの改行自動変換で\n→\rになって配列に入れられるのかなと思いました。
0673nobodyさん2010/03/12(金) 23:39:43ID:???
ifの順番はこの順番で下記のようなことをしたいのですが、@hogeの第二要素もtypeAになります。
[]の中を()で一まとめになるかと思ったのですが、やはり[]内は一文字に対してしかきかないのでしょうか?
解決できる正規表現はどのように書けばよいでしょうか?

@hoge = ("a---b---c","w---x---y---z");

foreach(@hoge){
if( /^[^(---)]+---[^(---)]+$/ ){
printf "typeA %s %s\n",$1,$2;
}elsif( /^[^(---)]+---[^(---)]+---[^(---)]+$/ ){
printf "typeB %s %s %s\n",$1,$2,$3;
}

}

と
06746732010/03/12(金) 23:48:42ID:???
if内の正規表現が1個づつ足りなかったorz

foreach(@hoge){
if( /^[^(---)]+---[^(---)]+---[^(---)]+$/ ){
printf "typeA %s %s\n",$1,$2;
}elsif( /^[^(---)]+---[^(---)]+---[^(---)]+---[^(---)]+$/ ){
printf "typeB %s %s %s\n",$1,$2,$3;
}
}
0675nobodyさん2010/03/13(土) 00:26:20ID:???
@hoge値がその2パターンぐらいならこれでいいじゃん

my @hoge = ("a---b---c","w---x---y---z");

for (@hoge) {
my @match= split(/---/);
if (@match == 3) { printf("typeA %s %s %s\n", @match); }
elsif (@match == 4) { printf("typeA %s %s %s %s\n", @match); }
}
0676nobodyさん2010/03/13(土) 01:17:06ID:???
>>673
[] は「マッチする文字を指定できる . 」であって、
文字列のグループ化ではない
http://perldoc.jp/docs/perl/5.10.0/perlretut.pod
http://perldoc.jp/docs/perl/5.10.0/perlreref.pod

そしてそういう処理は、フツーはこうする

my @hoge = ('a---b---c', 'w---x---y---z', '', '1', '2---3');
my @type = ('!', 'A', 'B', '?');

for my $hoge (@hoge) {
  my @item = split /---/, $hoge;
  pop @item;
  print "type$type[$#item] @item\n"; # $" = ' ' の場合
}

for my $hoge (@hoge) {
  my @item = split /---/, $hoge;
  if (@item == 3) { printf "typeA %s %s\n", @item[0,1] }
  elsif (@item == 4) { printf "typeB %s %s %s\n", @item[0..2] }
}
0677nobodyさん2010/03/13(土) 03:25:52ID:???
上の御二方と同意見だが、正規表現のお勉強として。
>>674
× /^[^(---)]+---[^(---)]+---[^(---)]+$/
◯/^([^-])---([^-])---([^-])$/
キャプチャしたい文字が各々単独一文字で無いなら、([^-]) を
([^-]+) とかに変えりゃいい。
typeB の正規表現も同じ事なので略。

ちなみに[^(---)] は、
・"(--" => "(" から "-" までの文字列(アスキーコード10進で、40 から 45 まで)
・次の "-" => "-" 。# => だけど上で既に含まれてる
・ ")" => ")" 。# => だけど既に含まれてる
上記の条件に合わないものにヒット
って意味。


perl -e ' ( chr $_ ) !~ /[^(---)]/ and printf "%s\t%s\n", $_, chr $_ for 0 .. 255 ;'
perl -e ' ( chr $_ ) !~ /[^a-c-e]/ and printf "%s\t%s\n", $_, chr $_ for 0 .. 255 ;'

とかやってみりゃ納得出来るかな。


0678nobodyさん2010/03/13(土) 16:12:28ID:moD4aVFU
LWPを使ってwebページを取得するのですが、あるディレクトリ以下のファイルをとるとき、
どのライブラリを使用すべきでしょうか。
現状、LWP::UserAgentのファイル指定で単独ページの取得は成功してるのですが、
ディレクトリ指定ではインデックスページがとれるだけです。
0679nobodyさん2010/03/13(土) 16:22:26ID:???
なんかずいぶん楽しそうなのは気のせいだろうか
0680nobodyさん2010/03/14(日) 00:07:51ID:???
>>678
君はブラウザで取得する時にどうyってディレクトリ以下のファイルを取ってるってるんだよ
06816782010/03/14(日) 14:52:56ID:???
どうもやはりファイル一覧の取得の仕方がわかりません。
>>680のいうブラウザの場合は、ディレクトリへのアクセス時に一覧を作成してくれるから
こういうファイルがあるなということがわかって選択(取得)できると思うんですが・・・
0682nobodyさん2010/03/14(日) 19:11:57ID:???
>>681
こういうファイルがあるなということがわかれば
こういうファイルを配列に入れて
ループで回してLWP::UserAgentのファイル指定でこういうファイルの単独ページを取得する
06836782010/03/14(日) 21:06:20ID:???
>>682
ループでというのはLWP::UserAgentのコードで多く見ました。
ですがいずれも、取得すべきURLが分っている前提のコードでした。

あるディレクトリ下に"こういうファイルがある"というのは
どのように知るのでしょうか。
0684nobodyさん2010/03/14(日) 21:17:37ID:???
少し頭使った方が
0685nobodyさん2010/03/14(日) 22:04:33ID:???
リンクをたどる方法が分からないのか
それとも(人間様から見ても)不明なファイルの在り処を探りたいのか
どっちの問題なのかが分からんのう
前者ならHTML解析してURLを得ればいいって話だし
06866782010/03/14(日) 22:27:12ID:???
>>685
なんとなく、うまく説明できていないでしょうか・・・
おそらく後者に近いのかもしれませんが、
ファイル名や構成がわからないディレクトリにアクセスして
中を検索の上、必要なファイル(あるいは全部)をとりたいだけなのですが・・・
0687nobodyさん2010/03/14(日) 22:28:11ID:???
そんなことできたら、セキュリティーやばいなw
0688nobodyさん2010/03/14(日) 22:33:40ID:???
ま、いずれにしろここで聞く話じゃないね
0689nobodyさん2010/03/15(月) 00:27:31ID:???
>>681
スレ違いだけど、このままだと何回も質問しそうな気がするので説明をすると、

>>>680のいうブラウザの場合は、ディレクトリへのアクセス時に一覧を作成してくれるから
>こういうファイルがあるなということがわかって選択(取得)できると思うんですが・・・
これは、
1.ブラウザが/とかにindex ofページを置いているサイトからHTMLを取得する
 (webサーバの設定でそういう表示設定をしているサイトがある)
2.そうすると帰って来たHTMLに<a>のリンクが並んでる
3.それをブラウザが表示する(ブラウザはそれぞれのファイルを取得してるわけじゃない。リンクを表示してるだけ)
(4.リンクをクリックすればファイルが取得できる)
ってことをやってる。

LWPができるのは1番で、「(2番の)HTMLが返って来たんならそのリンクをループで回して取ればいい」
って言ってるのが>>682

で、ブラウザの動きも2番のHTMLがあるからファイル一覧を表示できるのであって、
そういうサイトじゃなかったら(index ofを設定してないサイトだったら)表示できないよって話。
リンクもないのにサーバ上のファイルの場所がわかっちゃったらそのサイトは攻撃されるでしょ?
06906782010/03/15(月) 10:36:57ID:???
>>689
おかげさまでどう取得すべきなのかわかりました。
初歩的な問いのつもりでいたのですが、こちらの知識不足により
突飛な発想になってしまっていたのですね。

その後、リンクを辿っていく(本来の)方法で解決できました。
ありがとうございました。
0691nobodyさん2010/03/15(月) 12:42:45ID:???
いいってことよ
0692nobodyさん2010/03/15(月) 23:14:53ID:???
http://fumidai.net/http://www.php.co.jp/
でどうなる
0693nobodyさん2010/03/17(水) 16:12:18ID:???
DBIでINSERTが出来ません。
登録フォームからCGIでパラメータを取ってやってたのですが、上手く行かないので
最終的にMySQLターミナル上で有効なINSERT文を、そのままリテラルにprepareし、
ターミナルから"perl insert.pl"を実行したのですが、どうしてもレコードが追加されません。

# insert.pl
use strict;
use warnings;
use DBI;

my $data_source = "DBI:mysql:mydatabase:localhost:3306";
my $user = "user";
my $pass = "pass";
my $dbh = DBI->connect($data_source, $user, $pass,
    { RaiseError => 1, AutoCommit => 0 });
my $sth = $dbh->prepare("insert into table1 (名前) values ('ほげ')");
$sth->execute;
$sth->finish;
$dbh->disconnect;

[環境]
Fedora12(2.6.31.12-174.2.3.fc12.i686)
MySQL-5.1.42-2
Perl-5.10.1
DBI-1.609
getenforce -> Permissive

何かヒントをお願いします・・・
0694nobodyさん2010/03/17(水) 16:42:17ID:???
AutoCommit を1にするか自力でコミットするか

じゃない?
06956932010/03/17(水) 17:09:03ID:???
>>694
ありがとう!!!!!
0696nobodyさん2010/03/18(木) 00:26:44ID:???
下記のような感じでハッシュのアレイを作成しています。

my @testArray;
my $testHash= { value=>0, name=>'テスト0' };
push (@testArray, $testHash);
my $testHash= { value=>1, name=>'テスト1' };
push (@testArray, $testHash);

これをdeepcopyしたいのですが、
my @testArray2 = @testArray;
だとshallowcopyになってしまうようです。

有識者の方、deepcopyの方法をご教授願います。
0697nobodyさん2010/03/18(木) 00:36:33ID:w0JRv+Cl
use Clone;
06986962010/03/18(木) 00:46:07ID:???
>>697

ありがとうございます!試してみます。

後学のため、cpanモジュールに依存しないようなコーディングもご教授頂けたら幸いです。
0699nobodyさん2010/03/18(木) 09:24:09ID:???
my @testArray2 = @$testArray;

はどうだろうか
0700nobodyさん2010/03/18(木) 09:24:24ID:???
>>698
Cloneはxsだからperlでどう書くかの参考にはしにくいけど、
Clone::PPはpure perlなので読んでみるといい。
0701nobodyさん2010/03/18(木) 16:13:26ID:???
GET /a.xml HTTP/1.1
Host: 192.16
Connection: close
User-Agent:
x-ModelName: pp-pppp
x-SDKVersion: 1.1.1

リクエストヘッダが上のようにあり、この中で特殊な、x-ModelName
の pp-pppp を取得したいと考えています。(クライアントからリクエストを受けた、
サーバー側で)

しかし、
ttp://ja.wikipedia.org/wiki/%E7%92%B0%E5%A2%83%E5%A4%89%E6%95%B0#HTTP.E7.92.B0.E5.A2.83.E5.A4.89.E6.95.B0

をみますと、これに該当する環境変数がありません。
この場合、どうやって、pp-pppp を取得できますでしょうか?
0702nobodyさん2010/03/18(木) 16:47:58ID:???
>>701
環境変数の例なんかじゃなくてCGIの仕様を読むべきだな。

でもperlでCGI使うんならCGIモジュール使った方がいいんじゃ
ないか。headerメソッドってのが用意されてる。
0703nobodyさん2010/03/18(木) 18:53:46ID:???
>>696
ハッシュの要素にはスカラーしか存在しないと考えていいなら
@testArray2 = map{ { %$_ } } @testArray;
とか?
0704nobodyさん2010/03/19(金) 02:13:52ID:???
>>701
x-SDKVersionはとれてx-ModelNameだけがとれないのか、
環境変数の取得の仕方自体が分からないのか、どっち?

リクエストヘッダの内容は%ENVに入るんだから、普通に$ENV{x-ModelName}で取れるはずだけどね。
0705nobodyさん2010/03/19(金) 15:01:50ID:???
$ENV{HTTP_X_MODELNAME} janaino?
0706nobodyさん2010/03/19(金) 16:49:50ID:???
MySQL+DBIで、カラム名とデータを両方取りたいのですが、
fetchrow_hashrefだと、カラム名の順番がバラバラになってしまいます。
カラム順をテーブル通りにする良い方法はないでしょうか?
0707nobodyさん2010/03/19(金) 16:59:18ID:+1gTM2xb
keys で全部吐き出してみれば答えが分かるかと
0708nobodyさん2010/03/19(金) 19:18:24ID:???
>>706
つ ttp://www.ksknet.net/dbi/dbi_1.html
07097062010/03/19(金) 21:47:59ID:???
>>708
ありがとうございます。
休み明けに試してみます。
0710nobodyさん2010/03/19(金) 22:07:21ID:???
JAVA でいう、
response.setHeader("Refresh", "15");
 
レスポンスヘッダを作成する方法は
Perl
ではどうやればいいでしょうか?
0711nobodyさん2010/03/19(金) 22:23:13ID:???
>>710
print "Content-Type: text/html"
とかやるだろ?
それと一緒。
0712nobodyさん2010/03/20(土) 02:35:36ID:???
エディタはみなさん何を使っていますか?
emacs?
eclipse?
0713nobodyさん2010/03/20(土) 03:28:56ID:???
eclipseはエディタなのか
0714nobodyさん2010/03/20(土) 11:51:52ID:???
エディタは基本的に脳内
最終的にファイル化するためにメモ帳使うぐらいかな
0715nobodyさん2010/03/20(土) 12:20:32ID:???
メモ帳だとエラーがでたとき場所が特定できないので、結局エディタ使ってるわ
0716nobodyさん2010/03/20(土) 13:53:37ID:???
>>712-715
Perl書くのにどんなエディタ使ってる?
http://pc11.2ch.net/test/read.cgi/php/1014357485/
0717nobodyさん2010/03/20(土) 15:56:20ID:???
メモ帳で書いてるとかぶっちゃけ書いたことない奴だろ
文字コードと改行コードは最低選べるエディタじゃないと
0718nobodyさん2010/03/20(土) 15:59:35ID:???
ネタにマジレス
0719nobodyさん2010/03/20(土) 16:25:03ID:???
>>717
はあ?
FFFTPでアップすればなんか勝手にそういうのよくしてくれるだろ?
Linuxのサーバー使ったことない初心者ですか?w
0720nobodyさん2010/03/20(土) 18:03:56ID:???
詳しい説明サンクス
これならメモ帳でも充分だな。
0721nobodyさん2010/03/20(土) 18:33:08ID:???
なんか勝手にそういうの
0722nobodyさん2010/03/20(土) 20:13:06ID:VJC6JTjm
自鯖でテストしたこと無いやつら多すぎ
0723nobodyさん2010/03/20(土) 22:19:00ID:???
「なんか勝手にそういうの」とLinux鯖使用に何の関係が。
Linux鯖使ったことない初心者じゃなければ
SSH+vimか、Samba or rsync, and so on+エディタでしょ。
0724nobodyさん2010/03/20(土) 22:28:51ID:VJC6JTjm
Windows で編集を省くなよw
0725nobodyさん2010/03/20(土) 22:30:19ID:???
わざわざ言わないでも解る
0726nobodyさん2010/03/21(日) 10:16:56ID:???
LWPのgetstoreで質問です。
特定のサーバーの画像ファイルを定期的にコピーして取ってきているのですが一度 画像が壊れていることがありました。
画像の下半分がグレーになっていました。

is_successでチェックをしていたのですが、画像ファイルが完全に取得できたかは判断出来ないでしょうか?
codeを見て200だったらと改造しようかと思っていますが、この方法でエラーチェック出来るのか不安で

ほとんどの場合コピーに成功しているので再現が出来ていないです。
0727nobodyさん2010/03/21(日) 11:05:05ID:???
getstore って勝手に binmode してくれたっけ?
ステータス見てもその続きで届く画像が壊れてるかどうかはわからないよ。
07287262010/03/21(日) 11:45:10ID:???
ありがとうございます。
LWP mirror というのがあるようですがこちらはcontents-lengthなども比較してくれるようなので
ファイルが壊れてファイルサイズが違う場合のエラーはとれると考えてよいのでしょうか
07297262010/03/21(日) 12:05:21ID:???
mirrorは、ローカルにあるファイル(キャッシュ)とサーバー上のファイルの更新日時やサイズを見てダウンロードするかを決めているだけで
ダウンロードの処理自体は getstoreと同じという考えてあっていますか?
0730nobodyさん2010/03/21(日) 18:55:46ID:???
use Net::SMTP;を使用してメール送信を行っています。

特定のメールアドレス宛にのみ、メールが送信できない状況ですが、
my $ret = $smtp->dataend();
で1が返ってきます。

これは正常に送信できているということで良いのでしょうか?
受信側の問題でしょうか?
0731nobodyさん2010/03/21(日) 20:24:00ID:???
メールのログを見た方がいいと思う。
たぶん550 mailboxが無いとかそんなエラーが書かれてるんじゃないかな
0732nobodyさん2010/03/22(月) 14:13:32ID:???
$string =~ s/(hoge)// で置換したとき、置換に成功した個所のhogeを戻り値で得たいのですが、$1を使う以外に方法はありますか?
0733nobodyさん2010/03/22(月) 15:53:22ID:???
$&でもいいし

$string=~ s/((hoge))//;
にすればあら不思議、$2も使える
0734nobodyさん2010/03/22(月) 17:06:11ID:2ZzVyfyy
$cnt = $string =~ s/(hoge)//isg;

でどう?
0735nobodyさん2010/03/23(火) 17:33:46ID:E0uSL26K
perlのモジュール「RTF::Writer」についての質問です。

RTF::Writerを使い、日本語を出力しています。
このモジュールに%sで出力すると、何故か「く」という文字が「,」に置き換えられてしまいます。
この不具合の解消法をご存じの方いましたら教えていただけませんか?
0736nobodyさん2010/03/23(火) 21:42:53ID:22je5/ss
質問です。
あるファイルの一行が以下のようになっています。

[SA_Pre]perl[SA_BORY]hoge[SA_2323BO]

これをパターンマッチで「perlhoge」を抽出するようにしたい。[]で囲んだキーワードを取り除く
s/\[SA.*?\]//eで[]で囲んだキーワードを削除できません。
サクラエディタの置換機能なら、検索キーワードを「\[SA.*?\]」とすることでうまくいくようですが…
07371672010/03/23(火) 21:48:12ID:???
s/\[\w+\]//g
0738nobodyさん2010/03/23(火) 21:56:31ID:22je5/ss
>>737
ありがとう。感動しました
0739nobodyさん2010/03/23(火) 22:55:28ID:???
>>733
ありがとうございます。
>>734
すいませんカウントじゃないんです。
0740nobodyさん2010/03/23(火) 23:24:25ID:LM1mmRsS
my @data = $string =~ s/(hoge)//isg;

じゃぁこれで
0741nobodyさん2010/03/23(火) 23:32:04ID:???
s///gの返り値はコンテキスト関係なく置換回数じゃなかったっけか

my @data;
$string =~ s/(hoge)/push @data, $1; ""/ge;
とか
0742nobodyさん2010/03/24(水) 12:52:57ID:???
>>735
できるだけ詳しくソース、環境書いてみて
0743nobodyさん2010/03/24(水) 17:37:14ID:gXJd/117
>>742
おぉ、やっと返信が!

環境はwindows vista、active perl version 5.10.1をソースコードに使ってます。

以下ソースコード(TestRTFWriter.pl)
--
&useRTFWriter();

sub useRTFWriter(){

use RTF::Writer;
my $rtf = RTF::Writer->new_to_file("RTFsample.rtf");
$rtf->prolog('fonts' => ["MS Pゴシック"]);

$testStr = "くが表示できません。";

$rtf->printf(\'{\fs40 %s}',$testStr);
$rtf->print("\n\n");
$rtf->close;
}
--

そんでRTFSample.rtfの内容

?¬が侮ヲできません。

--

他の文字も化けてるね。。

0744nobodyさん2010/03/24(水) 17:55:26ID:JL5BpxOE
Perlマニュアル
http://douseidoumei.com/perlman2/
0745nobodyさん2010/03/24(水) 19:02:04ID:???
>>743
use utf8;
を先頭につけて文字コードをutf8にして保存するのが無難な気がするなぁ

use Encode;
$testStr = decode('sjis', "くが表示できません。");
でやってみたんだけどダメだった。
これはこれで誰か知ってたら教えて欲しい

==== utf8版Dump
PV = 0xa74bdc "\343\201\217\343\201\214\350\241\250\347\244\272\343\201\247\343
\201\215\343\201\276\343\201\233\343\202\223\343\200\202"\0
[UTF8 "\x{304f}\x{304c}\x{8868}\x{793a}\x{3067}\x{304d}\x{307e}\x{305b}\x{3093}\x{3002}"]

==== Encode版Dump
PV = 0xb3a2ec "\343\201\217\343\201\214\344\276\256\357\275\246\343\201\247\343
\201\215\343\201\276\343\201\233\343\202\223\343\200\202"\0
[UTF8 "\x{304f}\x{304c}\x{4fae}\x{ff66}\x{3067}\x{304d}\x{307e}\x{305b}\x{3093}\x{3002}"]
07467432010/03/24(水) 21:28:05ID:???
>>745

utf8にしたら上手く行きました。
ありがとう。

自分の環境でもencode版はだめでした。
後学のためになぜUTF-8だと上手く行くのか(UTF8と他の文字列の違い)を教えてくれませんか?

UTF-8は2バイト文字っていう認識しかないんだけど。
0747nobodyさん2010/03/25(木) 00:26:57ID:2wRnf0pF
質問です。
ファイルを処理する際、ファイルの先頭から一行ずつ処理していくのが一般的ですが
これを2〜3行ずつ読み込んで処理することは可能でしょうか。
たとえば以下のようなプログラムを処理した場合
---------------------------
#include <stdio.h>

int main(void)
{
return 0;
}
-------------------------
// int main(void)
// {
// return 0;
// }
-------------------------
といったように特定の関数をコメントアウト化したいです。
0748nobodyさん2010/03/25(木) 01:09:18ID:???
>>747
そのコメントアウト化ってどういうアルゴリズム?
ルールさえ決まってるなら1行ずつ処理していく方法でも上手くいきそうな気がするけどそれじゃダメそう?
0749nobodyさん2010/03/25(木) 01:16:51ID:???
$/=適当な区切り文字列
0750nobodyさん2010/03/25(木) 09:47:05ID:???
undef $/;
my $file = <$fh>;

これでファイルが丸ごとスカラに入る。
0751nobodyさん2010/03/25(木) 11:11:15ID:???

use CGI::Lite;
を付け加えると、
下記のエラーが出ます。
どうすれば解決できますか?

[user@aaa ~]$ ./test.pl
Can't locate CGI/Lite.pm in @INC (@INC contains:
/usr/lib/perl5/site_perl/5.8.8/i386-linux-thread-multi
/usr/lib/perl5/site_perl/5.8.8 /usr/lib/perl5/site_perl
/usr/lib/perl5/vendor_perl/5.8.8/i386-linux-thread-multi
/usr/lib/perl5/vendor_perl/5.8.8 /usr/lib/perl5/vendor_perl
/usr/lib/perl5/5.8.8/i386-linux-thread-multi /usr/lib/perl5/5.8.8 .)
at ./Extension_Mobility_test2.pl line 30.
0752nobodyさん2010/03/25(木) 12:43:51ID:???
>>751
root権限でcpan CGI::Lite
0753nobodyさん2010/03/27(土) 12:20:26ID:???
>>751
CGI::Lite をCPANからDLして、
http://search.cpan.org/dist/CGI::Lite/

使いたいCGIのあるディレクトにCGIってフォルダ作って中にLite.pm置くだけで使えるんじゃね?
試してないけど。
0754nobodyさん2010/03/27(土) 13:37:23ID:???
use lib がどうこう
依存関係がうんぬん
0755nobodyさん2010/03/27(土) 13:42:43ID:???
>>754
CGIのサブセットっぽいから動くんじゃね?
use libしなくても実行ファイルのルートからはたどってくれなかったっけ?
0756nobodyさん2010/03/29(月) 09:22:31ID:???
751のエラーを見る限りでは . が含まれてるようだけど、
コマンドラインで試すときとCGIとして起動されるときは
また環境が違うから、置き場所決めてuse libしといた
方がいいんじゃないかな。
0757nobodyさん2010/03/29(月) 14:57:28ID:???
ttp://www2u.biglobe.ne.jp/~MAS/perl/waza/authbasic.html

LWP::UserAgent->new;
を使っているのは理解しております。

HTTP::Requestもプログラム中では使っていますが、
なぜ、モジュール利用の宣言で
use LWP::UserAgent;
だけで、
use HTTP::Request;
となっていないのでしょうか?
0758nobodyさん2010/03/29(月) 15:23:53ID:???
LWP::UserAgentの中でuseしてるから
0759nobodyさん2010/04/02(金) 14:04:38ID:???
true と false を使いたいのですが定数でできますか?
0760nobodyさん2010/04/02(金) 15:26:59ID:???
>>759
1と0を使うのが習わし
0761nobodyさん2010/04/02(金) 15:33:40ID:???
マッチ演算子と置換をセットですることはできるのでしょうか?
イメージは下記のようにしたいのですが、エラーになります。


my $a = "aaa/bbb/ccc";
$a =~ sm|aaa/bbb|zzz|g;
0762nobodyさん2010/04/02(金) 15:44:52ID:???
>761
sm///演算子なるものはない。
s///のセパレータに/以外を使いたいという意味なのか?
であれば、s|aaa/bbb|zzz|g でよいのではないか?
07637612010/04/02(金) 16:01:28ID:???
>>762
エスパー回答ありがとうw

セパレータを変えたかったんです。
mはいらなかったんですね。
ありがとうございました。
0764nobodyさん2010/04/02(金) 16:44:23ID:???
知っているとは思うが、$aはmyの対象外だからねっ
0765nobodyさん2010/04/02(金) 20:09:24ID:TSIkzIjB
そ、そうだったのかw
■ このスレッドは過去ログ倉庫に格納されています