トップページ⇒php
981コメント390KB

くだすれPerl(超初心者用)2

■ このスレッドは過去ログ倉庫に格納されています
0001nobodyさん2008/03/03(月) 05:07:32ID:???
このスレッドは、他のスレッドでは書き込めない超低レベル、
もしくは質問者自身何が何だが分からない質問を勇気を持って書き込むスレッドです。
Perl使いが優しくコメントを返しますが、
お礼はPerlの布教と初心者の救済をお願いします。
0608nobodyさん2008/09/01(月) 11:22:08ID:???
ローカルのhtmlに書く理由は?

perl Kudasure.pl "http://pc11.2ch.net/test/read.cgi/php/1204488452/"
みたいな感じでいいんじゃないの?
06096042008/09/01(月) 11:43:44ID:???
>>608
やりたい事はまさにそれなんですが、URLのリストが沢山あって
それを保存してます。htmlなら一覧を見られて1クリックで実行できます。
0610nobodyさん2008/09/01(月) 11:55:13ID:???
そのhtmlから>>608みたいに羅列して
バッチファイルを作っちゃダメなの?
06116042008/09/01(月) 12:25:44ID:???
○○.batを作れということですか?
リストのどれがクリックされるか分からないので
html生成時にバッチファイルを作成できません。
0612nobodyさん2008/09/01(月) 12:26:20ID:???
インターフェースがHTMLならWebサーバ経由で叩くしかない
直接実行できたら問題あるだろjk
0613nobodyさん2008/09/01(月) 12:31:30ID:???
もう、ローカルにapacheでも入れたら?
0614nobodyさん2008/09/01(月) 12:42:30ID:???
>>607
> Webサーバを常駐させたくないんです。

Windowsにはスーパーサーバって無いの?
06156042008/09/01(月) 12:43:12ID:???
>直接実行できたら問題あるだろjk
Perlスクリプトの実行自体はfx3で問題なくできてます。

Webサーバはインストールしてありますが、
ツールのために常時起動させたくなくて質問しました。
直リン、ワンクリックで使えると便利なので。

しかし、出来ないと分かって諦めがつきました。
クリップボードで渡してみる事にします。
0616nobodyさん2008/09/01(月) 12:49:42ID:???
あ、ほんとだfirefoxだとできるんだすげー
0617nobodyさん2008/09/01(月) 14:21:02ID:???
firefox3だけど、perlのスクリプト、実行されないよ。
うちだけ?
0618nobodyさん2008/09/01(月) 14:25:45ID:???
>>615
ならfirefox3スレで聞くべき内容じゃん
0619nobodyさん2008/09/01(月) 14:43:08ID:???
何気に便利だったりする。
0620nobodyさん2008/09/02(火) 10:14:49ID:???
そもそも実行環境が無いとか
0621nobodyさん2008/09/03(水) 22:14:02ID:Mtq7kJsd
サイトに来た人のIPアドレスを記録するスクリプトを作りたいと思っています。

===ソースコード===
1 #!/usr/bin/perl
2
3 $IP_addr = $ENV{REMOTE_ADDR};
4
5 if ($count = open(OUT, ">>List.dat")) {
6 flock OUT, 2;
7 print OUT $IP_addr;
8 flock OUT, 8;
9 close OUT;
10 } else {
11 $count = 100;
12 }
13
14 print "Content-type: text/html\n\n";
15 print "IPアドレス:", $ENV{REMOTE_ADDR}, "<br>";
16 print '$count = ', $count;

これを実行してみると、ファイルが開けずに$count=100が表示されてしまいます。
同じフォルダ内でopen関数は使えたので、できそうな感じはするのですができません。

どこを書き直したら、IPアドレスを記録してくれるのか教えてもらえないでしょうか。
お願いします。

0622nobodyさん2008/09/03(水) 22:49:00ID:???
List.datが既存なら書き込み権限があるかどうか
List.datを作成ならそのディレクトリに実行権と書き込み権があるかどうか
06236212008/09/03(水) 23:04:45ID:Mtq7kJsd
>>622
アドバイスありがとうございます。
解決しました・・・。

/var/www/htmlに上のスクリプトを置いてあるのですが、
/var/www/htmlとスクリプトのパーミッションは777なので、
書き込み権限はあると思います。
後はスクリプトのほうでファイルを作成してくれるのかと思いましたが、
作成されていなかったのですが、
List.datを用意してあげたら問題なく書き込めました。

open (OUT, ">>List.dat")の追加書き込みでは、ファイルがなければ作成する、と
手元の参考書に書いてあったのですが何が原因だったのでしょう・・・。
0624nobodyさん2008/09/03(水) 23:16:56ID:???
>>623
この場合、スクリプト自身のパーミッションは関係しません。
List.dat を置くディレクトリのパーミッションが重要です。
0625nobodyさん2008/09/03(水) 23:24:03ID:???
>>623
> 手元の参考書に書いてあったのですが何が原因だったのでしょう・・・。

それを調べられるのはお前だけ。
0626nobodyさん2008/09/03(水) 23:24:17ID:???
そういうのは777じゃなくてギリギリ最低限のパーミッションはいくつか、を常に考えたほうがいいよ。
わかってしまえばこの手のことに悩まなくなるよ
0627nobodyさん2008/09/04(木) 00:02:51ID:???
> 5 if ($count = open(OUT, ">>List.dat")) {

ここで $count にどんな値が入るという想定になってるんだろ。
0628nobodyさん2008/09/04(木) 18:42:58ID:???
ActivePerlを下ろしてきてインストール後cpanからモジュールを
下ろしcpan モジュール名としたところ

Alert: While trying to 'parse' YAML file
'D:\Perl\cpan\FTPstats.yml'
with 'YAML::XS' the following error was encountered:
Usage: YAML::XS::LibYAML::Load(yaml_str) at D:\Perl\lib/YAML/XS.pm line 70.

というエラーらしきものがでて先に進むことがができません。他に何か必要
なのでしょうか?
0629nobodyさん2008/09/04(木) 19:11:10ID:???
PPMでやるんじゃない?
0630nobodyさん2008/09/04(木) 20:01:44ID:???
できました、ありがとうございます
0631nobodyさん2008/09/05(金) 01:31:58ID:???
>>627
perldoc -f open を穴が開くまで嫁。
06326272008/09/05(金) 01:45:29ID:???
>>631
> Open returns nonzero upon success, the undefined value otherwise.
> If the open involved a pipe, the return value happens to be the pid of the subprocess.

こういう値を「$count に代入して表示」するコード(>>621)に疑問を持ったんだけど、読み足りない?
穴が開くほどは読んでない。
0633nobodyさん2008/09/05(金) 01:56:39ID:???
>>632
じゃあ通りすがりのおれが特別に教えてやるよ
>>621はIPアドレスを記録するのが目的で、$countは制御がどこに移ったかを確認するためだけのもの

ま、if文で必ず真偽が代入されるからelseは余計だけどな
06346272008/09/05(金) 02:41:42ID:???
>>633
特別に教えてくれてありがとう。「else なら 100」用ということで。

$is_success ぐらいのほうが似合うぞぐらいの気持ちで書いたもんに
>>631が来るとは思わなかった。
06356312008/09/05(金) 02:53:49ID:???
>>634
失礼した。カルシウム足りないらしい。

ブールで済む話ならむしろ代入は要らんし、
>>621 程度の処理なら or die でも事足りるところを、
あえて表示用に拾ってるなら >>633 ってことだね。
0636nobodyさん2008/09/05(金) 10:58:48ID:???
プログラム板から越してきました。

ActivePerl 5.10 で Mail::IMAPClient を使って、Gmail に接続。
未読メールの添付ファイルを取ってくる……というスクリプトを書いているのですが、
取ってきた添付ファイルが軒並み破損してしまっており、正常なものが取得できません。

具体的にどんな感じになるのかというと、
PDF = ファイルが壊れている、と出て開けない。
JPG = 画像の下の方がブロックノイズ(最後までデータができていないっぽい)
HTM = ファイルの最後の方で途切れてしまう。
TXT = ファイル末尾に謎の文字化け。(=ェ��攵モ]スクラmエ輜オラ ←こんなのが。なんだこりゃ。)
となります。

ソースは >>637 に貼ります。
どのようにしたら、正常なファイルを取得することができるのか教えていただけないでしょうか?
0637nobodyさん2008/09/05(金) 11:00:04ID:???
use strict;
use MIME::Parser;
use Mail::IMAPClient;
use IO::Socket::SSL;

my $parser = new MIME::Parser;
$parser->output_to_core(1);

my $socket = IO::Socket::SSL->new(PeerAddr => 'imap.gmail.com',PeerPort => 993) or die "socket(): $@";
my $client = Mail::IMAPClient->new(Socket => $socket, User => 'user', Password => 'password') or die "new(): $@";

if ( $client->IsAuthenticated() ){
 $client->select('INBOX');
 my @uid = $client->unseen;
 foreach my $id (@uid) {
  my $message = $client->message_string($id) or warn "Timeout!";
  my $entity = $parser->parse_data($message);
  my $header = $entity->head;
  if ( $entity->is_multipart ){
   my $parts_count = $entity->parts;
   for (my $i = 1; $i < $parts_count; $i++) {
    my $part_entity = $entity->parts($i);
    my $filename = $part_entity->head->recommended_filename;
    my $filebody = $part_entity->bodyhandle->as_string;
    open(FILE, ">$filename");
     print FILE $filebody;
    close(FILE);
   }
  }
 }
}
0638nobodyさん2008/09/05(金) 11:24:52ID:???
>>636
超初心者用スレで質問する内容じゃないと思うけど。。。
テキストファイルも化けてるから解決にはならないと思うけど、binmodeはしたほうがいい
06396362008/09/05(金) 11:54:09ID:???
>>638
他に質問スレが見あたらなかったもので……スミマセン。

binmode も試している(先のソースじゃ消えてしまってました)のですが、やはり同様です。
ただ、binmode にしないと JPG ファイルは読み込みすらできなくなります。

ここでかれこれ数時間詰まっちゃってますヽ(´Д`;)ノ
0640nobodyさん2008/09/05(金) 17:52:29ID:???
>>636
> どのようにしたら、正常なファイルを取得することができるのか教えていただけないでしょうか?

クイズ?
0641nobodyさん2008/09/05(金) 18:20:32ID:???
>>636
添付無しならおk?
0642nobodyさん2008/09/05(金) 18:25:42ID:???
>>636
> どのようにしたら、正常なファイルを取得することができるのか教えていただけないでしょうか?

デバッグして問題点を見つけ出し、そこを修正すれば良い。
0643nobodyさん2008/09/05(金) 18:44:30ID:???
MIME::Parserだな
06446362008/09/05(金) 18:59:17ID:???
確かにデバッグして問題点見つけられればいいんですが、正直お手上げ状態なんです。

>>641
添付無しのメール、本文を抜き取る分には問題ないみたいです。
ただ添付ファイルを拾おうとすると、前述のとおりに問題が出てしまいます。

>>643
MIME::Parser の使い方がどこかおかしいでしょうか。初めて使うモジュールなもので……。
0645nobodyさん2008/09/05(金) 19:07:30ID:???
>>644
> 添付無しのメール、本文を抜き取る分には問題ないみたいです。
> ただ添付ファイルを拾おうとすると、前述のとおりに問題が出てしまいます。

じゃあ、問題ないメールをgmailを通さずに直接パーザに食わせて見ろ。
0646nobodyさん2008/09/05(金) 20:40:32ID:???
>>645
おおお、いけました!

Mail::IMAPClient の message_to_file で一度ファイルに保存してから、
MIME::Parser で処理したら正常にファイルを取得することができました。

公開されてるモジュールでこんなこともあるんですね。勉強になりました。

0647nobodyさん2008/09/05(金) 20:51:35ID:???
>>646
品質が高いから公開されているのじゃあない。
公開してフィードバックを活かすから品質が上がるのだ。
# CPAN でもマイナーモジュールの中にはソースがアレなのもたくさんあるのよ。

解決おめでとう。

現象を David にレポートして、そのサイクルに貢献するのも一興。
0648nobodyさん2008/09/07(日) 20:34:27ID:???
【コミュニティーサイト作成有志募集!】

現在コミュニティーサイトGaccoで有志を募集しています。
詳しい概要等は
→http://www36.atwiki.jp/vipvipschool/
こちらをご覧下さい。

・プログラミングができる方
(現在技術陣は6名です)
・ウェブデザイン・画像編集能力がある方
(現在デザイン陣は2名です)
・宣伝能力のある方
(人員募集やサイト完成後の宣伝等。動画編集ができると○。)

を募集しています。
気軽にIRCに参加、またはsuteあっと2ch.bona.jpまでメールを下さい。

スレッド:ttp://ex14.vip2ch.com/test/read.cgi/news4gep/1219068297/l50
0649nobodyさん2008/09/11(木) 04:32:33ID:Fj1BKArt
perl初心者です。よろしくお願いします。
複数の行からなる配列を特定の行で行ったソートと同じ順に並び変えたいのですがうまくいきません。

例として下の@hairetu1を昇順にソートして、それと同じソートを他の4つの配列にも施したいです。

@hairetu1=[30,80,50,90]
@hairetu2=[3,8,5,9]
@hairetu3=[さん,はち,ご,きゅう]
@hairetu4=[a,b,c,d]
@hairetu5=[3305,2206,1600,1128]

↑を↓の様にソートしたいのです。

@hairetu1=[90,80,50,30]
@hairetu2=[9,8,5,3]
@hairetu3=[きゅう,はち,ご,さん]
@hairetu4=[d,b,c,a]
@hairetu5=[1128,2206,1600,3305]


みなさんは複行配列のソートはどうされているのでしょうか
お教えいただけませんでしょうか。どつぼにはまっています。
0650nobodyさん2008/09/11(木) 05:12:08ID:???
$a <=> $b −−>大きくなる順番だから、「昇順」
$b <=> $a −−−>小さくなる順番だから、「降順」


用語はこれで合ってる?
0651nobodyさん2008/09/11(木) 05:13:02ID:???
@hairetu5=[1128,2206,1600,3305]


これってどういうルールで並び替えたのかよくわからない。
単に間違い?
0652nobodyさん2008/09/11(木) 05:15:25ID:???
@hairetu3=[さん,はち,ご,きゅう]

↑これってそのままだと無理だよね?
まず、数字ではないから、数値ソートは使えない。
文字列ソートはできるが、それって単に
アスキーの順番に並び替えるだけだから。

だから、どうしてもというなら、ハッシュで
3→さん
8→はち
9→きゅう

みたいな対応表を作っておいて、それで
3,8,9を数値ソートする、という風にしないと
だめなんじゃないかな。
0653nobodyさん2008/09/11(木) 08:44:59ID:???
phpの人です
perlでHello worldと文字列を出力したいのですが表示されません
perlはc:\perlにはいってて、perl.exeはbinの中にあります
どのように書き直したら文字列を出力できますでしょうか?

#!/c:\perl\bin\perl.exe

print "<html><head><title>テストperl</title></head><body>";
print "Hello world\n";
print "</body></html>";
0654nobodyさん2008/09/11(木) 09:24:19ID:???
お前は何を言ってるんだ
0655nobodyさん2008/09/11(木) 09:32:03ID:???
>>653

#!C:/Perl/bin/perl.exe
print "<html><head><title>テストperl</title></head><body>";
print "Hello world\n";
print "</body></html>";

をtest.plと保存して、
http://hoge/test.pl
をアクセスしてみろ。
0656nobodyさん2008/09/11(木) 10:01:19ID:???
wwwサーバ使った実行ならヘッダも書いとけ
0657nobodyさん2008/09/11(木) 10:20:26ID:???
Content-Type: text/html
0658nobodyさん2008/09/11(木) 10:55:26ID:???
>>649
用途に向いたデータ構造に変更しましょう。

> @hairetu1=[30,80,50,90]

もし本当にこうだとすると、以下と等価であり、
少々不自然で扱いづらいでしょう。

@hairetu1 = ( [30,80,50,90] );
# @hairetu1 は $hairetu1[0] に無名配列リファレンスを持つ、
# 1要素のみの配列になっている点に注意。

以下は一例です。

@hairetu = (
[qw( 30 3 a 3305 さん )],
[qw( 80 8 b 2206 はち )],
[qw( 50 5 c 1128 ご )],
[qw( 90 9 d 1128 きゅう )],
);

あとは値を比較した結果を使って @hairetu の要素を入れ換える操作を行えばおっけー。
その辺の操作は調べると見つかるのでがんばって。
0659nobodyさん2008/09/11(木) 11:03:43ID:???
>>658 余計わかりにくくなってる
0660nobodyさん2008/09/11(木) 11:05:32ID:???
ワロタ
0661nobodyさん2008/09/11(木) 11:07:57ID:n+/h4em7
あっはっはwwwwwまだこのスレあったのかwwwwww
いつまでクソ言語にしがみついてんだよテメエらwwwww
いま時代はRuby,php,pythonだろwwww
乗り遅れ乙wwwww
うぇっwwうぇwww時代に乗れなくてくやしいのうwwくやしいのうwwwwww
0662nobodyさん2008/09/11(木) 11:13:08ID:???
>>649
my @hairetu1=(30,80,50,90);
my @hairetu2=(3,8,5,9);
my @hairetu3=qw/さん はち ご きゅう/;
my @hairetu4=qw/a b c d/;
my @hairetu5=(3305,2206,1600,1128);

my @array;
for (0..4) {
push @array, join(',', $hairetu1[$_], $hairetu2[$_], $hairetu3[$_], $hairetu4[$_], $hairetu5[$_]);
}
@array = sort { $b cmp $a } @array; # <=> かもしれないけどなんとなく cmp
print join("\n", @array); # この順にしたいんですよね

Excel みたいな「行と列」を思い浮かべながら @hairetu1, 略, @hairetu5 で
再現しようとするからどつぼなんだと思う。
0663nobodyさん2008/09/11(木) 12:05:15ID:???
my @hairetu1 = (30,80,50,90);
my @hairetu2 = (3,8,5,9);
my @hairetu3 = ('さん','はち','ご','きゅう');
my @hairetu4 = qw(a b c d);
my @hairetu5 = (3305,2206,1600,1128);

my @narabi = sort{$hairetu1[$b] <=> $hairetu1[$a]} (0..$#hairetu1);
foreach(\@hairetu1, \@hairetu2, \@hairetu3, \@hairetu4, \@hairetu5){
@{$_} = @{$_}[@narabi];
}

--

my @hairetu = ([30,3,'さん','a',3305], [80,8,'はち','b',2206],[50,5,'ご','c',1600], [90,9,'きゅう','d',1128]);
@hairetu = sort{$b->[0] <=> $a->[0]} @hairetu;

普通はこっち。
0664nobodyさん2008/09/11(木) 12:05:27ID:???
この超絶簡単な例題に、どうしたらそういう答え(つか思いきりバッドノウハウ)を
思いつくのか理解出来ん。データ構造が腐ってるってのを置いとくにしても、、、
my @ind = sort { $hairetu1[$b] <=> $hairetu1[$a] } 0 .. 3 ;
@hairetu1 = map{ $hairetu1[$_] } @ind ;
@hairetu2 = map{ $hairetu2[$_] } @ind ;
# 略
@hairetu5 = map{ $hairetu5[$_] } @ind ;

ちなみに自分でデータ構造から考えるなら二次元配列かhashにするに決ってる、こんなもん。
0665nobodyさん2008/09/11(木) 12:07:19ID:???
タイミングが悪かった
>>664は>>663に言ったもんじゃない
06666492008/09/11(木) 14:32:27ID:MBV8c4KU
皆さんどうもありがとうございます。助かります。
今から皆さんが教えてくれたのを全部試してやってみます。
つか自分超絶初心者です。。。
いいプログラム作れる様がんばります。
0667nobodyさん2008/09/11(木) 14:59:42ID:???
死んじゃダメだよ! ゼッタイ。
06686622008/09/11(木) 15:35:31ID:???
>>664
俺ですね。
他の配列のソート順でgdgdしてたので、質問者さんがわかりそうな道具で
「こういう感覚ですかね?」と書こうとした(ものがアレすぎたのでお怒りになった)んですけど
寝とけばよかったです。0 .. 4 とか書いてるし。

くだすれなのに「腐ってる」「こんなもん」なんてことになってるのも、その怒りの余波だと思うので
質問者さん、すみません。
0669nobodyさん2008/09/11(木) 18:40:06ID:h0fBdZdn
初心者なんですが、すいません。
コードを読んでいると$hoge[2]とかいうのはわかるんですが、

$hoge[1][0][0]=3;
$hoge[1][0][1]=5;
$hoge[1][0][2]=7;
とかいうのが出てきたんですが、これは何を意味しているんでしょうか?
0670nobodyさん2008/09/11(木) 18:48:53ID:???
>>669
多次元配列
0671nobodyさん2008/09/11(木) 18:51:07ID:???
>>669
配列の配列の配列
0672nobodyさん2008/09/11(木) 18:51:22ID:???
どういう意味で多次元配列使ったかは本人に聞く以外にはないと思う
06736692008/09/11(木) 19:14:29ID:h0fBdZdn
多次元配列ですか。ありがとうございます。調べてみます。

ところで、
$hoge[1][0][0]=3;
$hoge[1][0][1]=5;
$hoge[1][0][2]=7;
の場合、

@hoge=( [ [*,*,*], [*,*,*], [*,*,*] ], [ [3,5,7], [*,*,*], [*,*,*] ], …)という感じでしょうか?

だとしたら、この3,5,7だけを
@list=(3,5,7)の様にひとつの配列にするにはどうすれば良いでしょうか。
何度もすいません。
0674nobodyさん2008/09/11(木) 19:16:46ID:???
@list = @{$hoge[1][0]}
06756692008/09/12(金) 00:22:15ID:Oy+yCkpG
>>674
ありがとうございました。
0676nobodyさん2008/09/22(月) 04:48:26ID:aVlitntf
すいません、超初心者です。
@a = ([5,8,0,50], [4,6,1,30], [3,7,1,200], [5,8,1,50], [3,8,0,150], [2,9,0,110])
grepを使って、上の配列から3つ目が1のものだけを抜き出して、
@b = ([4,6,1,30], [3,7,1,200], [5,8,1,50])
としたいのですが、どのように記述すればいいのでしょうか。
0677nobodyさん2008/09/22(月) 07:34:12ID:???
@b = grep { $_->[2] == 1 } @a
0678nobodyさん2008/09/23(火) 04:34:43ID:???
foreach $_ (@b) {
print "@$_\n";
}


↑結果を表示するには
このコードでいい?
0679nobodyさん2008/09/23(火) 05:20:37ID:???
やってみてから書き込め
0680nobodyさん2008/09/24(水) 10:17:33ID:???
それ!
それがだいじ
0681nobodyさん2008/09/24(水) 15:42:32ID:???
> ↑結果を表示するには
> このコードが窮極?

って質問すればいいんじゃないかな


0682nobodyさん2008/09/24(水) 16:12:52ID:???
TMTOWTDI
って答えが返ってくるんじゃないかな
06836762008/09/25(木) 01:55:10ID:rnTIMd1p
>>677
ありがとうございました。
返事が遅れてすいません。
なぜかホスト規制くらって2〜3日アクセスできませんでした。orz
0684nobodyさん2008/10/03(金) 16:52:32ID:Rl6ONEmX
すいません、超初心者です。

↓の様な記述ですが、
my $flag = (!$a) ? random(3) : random(11));
↑これは、
$aの値が無ければ3未満のランダムの数を$flagに代入、
$aの値が存在すれば11未満のランダムの数をで$flagに代入
ですよね。

ただ、↓の様なのがあって、どうしても意味がわかりません。
my $flag = (!$a) ? !($b >= random(100)) : (($c <= $a) ? random(3) : random(11));
↑これはどのように解すれば良いのでしょうか。
0685nobodyさん2008/10/03(金) 17:22:11ID:???
>>684
random てのが何を示すか分らんが…。
! ( $b >= random(100) ) は確実に0、1しか返さんから変に思えるが、
まあ、アリではあるので。
ポイントは、
1. 条件式「!($b >= random(100)) 」を式としてではなく値として利用。
2. 三項演算子の二段がさね。

my $res = COND ? TRUE_EXPR_1
    : ( COND ? TRUE_EXPR_2
    : FALSE_EXPR_2 ) # FALSE_EXPR_1
    ;

my $flag
 = ! $a # CONDITION
 ? !($b >= random(100)) # TRUE_EXPRESSION
 : # FALSE_EXPRESSION ( だかその中にさらに三項演算子)
  (
  ($c <= $a) # CONDITION
  ? random(3) # TRUE_EXPRESSION
  : random(11) # FALSE_EXPRESSION
  )
 ;

分けると
my $pre_flag = ($c <= $a) ? random(3) : random(11) ;
myy $flag = ! $a ? !($b >= random(100)) : $pre_flag ;
0686Perlについて教えてください。2008/10/03(金) 18:04:37ID:PunwVHG2
cgi掲示板なのですが、ログインすると文字化けしてまして、
コードがISO、西ヨーロッパなどとなってしまうのです。

そこで、headerの部分にcharset=を含めようとしてるのですが、
何度やっても、500エラーになってしまいます。


sub header {
print "Content-type: text/html\n\n";
print "<!--//HEAD//-->\n";
print "<html><head>\n";
print "<META http-equiv="Content-type" content="text/html; charset=Shift_JIS">\n"
print "<title>CGI Control Panel</title>\n";


print "<META http-equiv="Content-type" content="text/html; charset=Shift_JIS">\n"
↑
を追加して日本語になるように、お願い致します。
0687nobodyさん2008/10/03(金) 18:06:50ID:???
セミコロンが抜けてる
あと、Content-type: text/html; charset=云々
というのもあるよ。
0688nobodyさん2008/10/03(金) 18:22:45ID:???
>>686
マルチ氏ね
06896842008/10/04(土) 09:25:08ID:S1uyMhw/
>>685
なるほど、わかりました。
すいません。randomはrandの間違いでした。

my $flag = (!$a) ? !($b >= rand(100)) : (($c <= $a) ? rand(3) : rand(11));

つまり↑と↓は同じという理解で良い訳ですね。

my $flag;
if (!$a) {
$flag = !($b >= rand(100));
} elsif ($c <= $a) {
$flag = $rand(3);
} else {
$flag = $rand(11);
}

ありがとうございました。
0690nobodyさん2008/10/04(土) 10:53:07ID:uZuIKJns
「導入効果バツグン! PHP5.0+MySQL5.0で構築する最速Webシステム」
↑これおすすめ!
"register_globals = on"
を推奨していることについて気をつければ・・・ですが
0691nobodyさん2008/10/04(土) 18:05:45ID:???
専用鯖なら気にならんからな
0692nobodyさん2008/10/04(土) 18:06:47ID:???
>>691
なんで?
0693nobodyさん2008/10/04(土) 18:16:28ID:???
safe_modeと勘違いしてる悪寒
0694nobodyさん2008/10/04(土) 19:36:37ID:???
1 ******
2
3 aaa
4
5 ******

上のようなテキスト(数字は行番号)で、任意の文字列(aaa)にマッ
チしたら、囲まれた範囲(2行目〜4行目)を別ファイルにコピーする
コードはどう書けばいいでしょうか?

自分でも調べますが、perlは全く知らないので教えてくれる人がい
ると助かります。
0695nobodyさん2008/10/04(土) 19:50:09ID:???
1: > perlは全く知らないので
2: ところでaaa
3: aaa
4: aaa
5: これだと
6: aaa
7: どこからどこまでaaaが
8: aaa
9: aaa囲まれた
10: 範囲なんだ
0696nobodyさん2008/10/04(土) 20:01:11ID:???
>>694
簡単なのは「******」から次の「******」までをバッファリングして、
バッファの中に「aaa」があったらファイル開いて書き込む、とかかね。
06976942008/10/04(土) 20:31:56ID:???
>>696
なるほど、その発想は無かった。
0698nobodyさん2008/10/04(土) 21:35:30ID:???
696氏の方針で。
perl -0777ne 'print grep /^aaa$/m, /^\*{6}\n(.*?)(?=^\*{6}\n)/gms ' hoge.txt >fuga.txt

正規表現一回だと結構めんど
perl -0777ne 'print /^\*{6}\n((?:(?!^\*{6}\n).)*?^aaa\n(?:(?!^\*{6}\n).)*?)(?=^\*{6}\n)/gms ' hoge.txt >fuga.txt
06996942008/10/04(土) 22:21:09ID:???
>>698
ありがとう、参考にさせてもらいます。
07006942008/10/05(日) 14:05:30ID:???
お陰様で当初の目標は達成できました。どうもありがとう。

次は一歩すすんで、↓のようなテキストの場合、2-4行目と9-11行
目を別ファイルに保存したいのです。


1 *start*
2
3 aaa
4
5 *end*
6
7
8 *start*
9
10 aaa
11
12 *end*


ファイルをオープンしてwhile文で繰り返し処理をしたら行けるの
かな、と思ったのだけど、よく考えたらwhileは1行ずつしか読み
込まないからこの方法だと駄目なのですね。

分かる人がいたらお願いします。
0701nobodyさん2008/10/05(日) 14:13:01ID:???
>ファイルをオープンしてwhile文で繰り返し処理をしたら行けるの
>かな、と思ったのだけど、よく考えたらwhileは1行ずつしか読み
>込まないからこの方法だと駄目なのですね。

なにがダメなんだ?
0702nobodyさん2008/10/05(日) 14:19:41ID:???
後出し追加質問は良くない。
自分で何処まで書けたのか提示しないのも良くない。

この質問に答えた後に、「では…の様にするのはどうしたら良いでしょう?」
って来るのが目に見えてて答える気にはならん罠。
0703nobodyさん2008/10/05(日) 14:21:12ID:???
後から出すんだから追加質問に決まってたorz...
0704nobodyさん2008/10/05(日) 14:56:18ID:???
httpリクエストヘッダからクッキーを抜き出したいんだけどお願いします
クッキーを発行しているページへ下記の様にしましたけどエラーです
どなたか手直しお願いします
やりたいことは新しいクッキーを100個くらい集めたいです

use HTTP::Request;
use LWP::UserAgent;
 
my $ua = LWP::UserAgent->new;
my $request = HTTP::Request->new(GET => 'http://hoge.jp');

while(1){
my $response = $ua->request($request);
print $response->header('Set-Cookie'),"\n";
sleep 1;
0705nobodyさん2008/10/05(日) 14:58:35ID:???
>>704
hoge.jp は実在だから使うなと(ry
0706nobodyさん2008/10/05(日) 15:07:27ID:???
えぇええええ!
実在してたのかorz
この前、実在のアドレスは2chで晒すなと指摘を受けたので
気をつけたのに
>>705さんは私と多分どこかで遭遇してるね
いつも応援ありがとう
よろしく^^
0707nobodyさん2008/10/05(日) 15:09:29ID:???
実在はwww.hoge.jpの方だた。良く見ずに書いた。
あなたには非が無い。
07086942008/10/05(日) 16:00:04ID:???
>>702
それは申し訳ない。
次からはルールに倣って質問します。
■ このスレッドは過去ログ倉庫に格納されています