【Perl】初心者コーナーPart11
■ このスレッドは過去ログ倉庫に格納されています
0001nobodyさん
02/03/27 12:53ID:wAXxxOxPいらっしゃーい、Perlの「コーディング」で困ってる人のスレです。
1:自分はこう言う事がしたい。
2:それでこんな風にやってみたが・・・
3:それだとこんなエラーが出て上手く行かなかった。
1と3が無いと誰も答えられないよ、良い回答は良い質問から。
一緒に勉強しましょう。
参考書籍はこちら【【Perl,CGI】参考書籍 第2版 】
http://pc.2ch.net/test/read.cgi/php/988809842/
CGIの質問はこちら【CGIだけどなんか質問ある Pert 5.01 】
http://pc.2ch.net/test/read.cgi/php/1015127347/l50
その他の雑多な話題は、【CGIに依存しないPerlの話題一般】
http://pc.2ch.net/test/read.cgi/php/991313362/
過去ログ、その他の役立ち情報は>>2-10を見よう。
0421417
02/04/12 03:47ID:???unix の ping コマンドとかは正常終了が 0 ですよね。
他のも一律で 0 に決まってるモンなんでしょうか。
web で 1 を見かけたので真似しだしたんですよ。最近。
スレ違いすみません。
0422stdlib.h
02/04/12 04:20ID:???#define EXIT_SUCCESS 0
#define EXIT_FAILURE 1
0423417
02/04/12 04:44ID:???ありがとうございます。そうか、ライブラリのヘッダか (汗
まだ、解らない事があっても、それを調べる方法さえ解らない
程度の知識ですので、つい真似というか見習ってしまうのですよ。
反省。ちなみに ping の戻り値も知ったのは jman からですしねぇ。
0424nobodyさん
02/04/12 05:01ID:???perldocの使い方・読み方覚えるがキチ。
0425417
02/04/12 06:30ID:???情報有難う御座います。早速やってみました。
% perldoc perlfaq | less
> perlfaq 砌requently asked questions about Perl ($Date:
> 1999/05/23 20:38:02 $)
> Very general, high碎evel information about Perl.
> 瞰hat is Perl?
なんかウチの環境だと文字化けする上、表示に 22sec もかかる・・。
あ、perldoc -f use とかなら化けない。
しかし英語ばかりで頭痛いですねぇ。
Perlドキュメントの読み方
http://member.nifty.ne.jp/hippo2000/perltips/podread.htm
perldoc
http://yuri.sakura.ne.jp/~propella/tips/perldoc.html
今までリスト化されて読みやすい下記サイトを聖書と崇めてましたが
http://www.namazu.org/~tsuchiya/perl/info/perl-ja_toc.html
最新版には perlpod なんて項目があったのですね。
http://www.kt.rim.or.jp/~kbk/perl5.005/index.html
.pm の中身とかを見て、ずっと頭を悩ましていましたよ。
0426nobodyさん
02/04/12 07:09ID:???0428nobodyさん
02/04/12 09:06ID:???readline($h{in)
0429nobodyさん
02/04/12 15:57ID:XFr3wilJ0430417
02/04/12 19:35ID:???ホントだ、できましたよ。有難う御座います。
しかし perldoc では説明でましたが、web 上に散乱するサイトの
日本語マニュアルには全然載っていない関数みたいですね。なんでだろ。
0431nobodyさん
02/04/12 20:10ID:???ダウンロード用のCGIを作っているのですが、ログ形式が
日付<>ファイル名<>総DL数<>LZHのDL数<>ZIPのDL数
となっているログのファイル名が同じの総DL数、LZHのDL数、ZIPのDL数
をそれぞれ足したものを表示されるにはどうすればよいのでしょうか。
総DL数だけならハッシュ使えば出来ると思うのですが。
具体的には
20020423<>test<>5<>2<>3
20020423<>test1<>5<>2<>3
20020424<>test<>6<>3<>3
20020424<>test1<>8<>5<>3
を
test,11,5,6
test1,13,7,6
みたいな感じで出力したいのですが。
0432nobodyさん
02/04/12 21:00ID:???my %count;
while (<DATA>) {
chomp;
my ($date,$name,$all,$lzh,$zip) = split /<>/;
$count{$name}{all} += $all;
$count{$name}{lzh} += $lzh;
$count{$name}{zip} += $zip;
}
foreach (keys %count) {
print join ',',$_,$count{$_}{all},$count{$_}{lzh},$count{$_}{zip},"\n"
}
<>;
__END__
20020423<>test<>5<>2<>3
20020423<>test1<>5<>2<>3
20020424<>test<>6<>3<>3
20020424<>test1<>8<>5<>3
0433nobodyさん
02/04/12 21:02ID:???},"\n"
↓
} ."\n"
0434nobodyさん
02/04/12 21:46ID:4zjuzdoC特定の位置だけを表示したい場合のスマートな方法ってどんなですか?
自分の場合は
単純に1行目から順に読み出して行って、指定行になったらループを抜ける
もしくは、配列に全部読み込んでから指定範囲だけ取り出す
ってやりかたしてるんですが、いまいちよろしくないです。
ファイルサイズによりますがカナリきついです。
また新着ログはファイルの先頭行に挿入したいのですが、この場合は
いったん全部読み込んで、先頭行にログ追加して、全行書き出す
するしかないのでしょか、、、、
0435nobodyさん
02/04/12 21:54ID:???他のファイルを追記で書き込んでリネーム
0436nobodyさん
02/04/12 22:31ID:4zjuzdoCほうほう、その方法でためしてみます
やはり最終的には全行を書き出す事になるんですね、がくり。
挿入とかできたら便利なのになぁとか思った
0437nobodyさん
02/04/12 22:51ID:???それは太古の昔から無理。
なので、ログは先頭に追加せず、おけつに追加していき、
表示する時とかに逆順にしたほうが吉。
もしくは、先頭に追加できるファイルシステムを考案しる。
0438nobodyさん
02/04/13 00:09ID:???0439nobodyさん
02/04/13 06:55ID:???以下の2次元配列において、列部分($data[行][列])の最大インデックスを求める
効率的な方法を何卒、ご教授ください。よろしくお願いします。
一応、以下のようにループで回して比較する方法を考えましたがもっとスマートな
やりかたがありそうな気がしていますがどうしても思いつきません。
$MAX= $#{$data[$_]}> $MAX ? $#{$data[$_]} : $MAX for ($[ .. $#data);
0440nobodyさん
02/04/13 08:50ID:???ありがとうごさいました。うまくできました。
0441ゲーム房
02/04/13 10:19ID:jvfE2/Ztでも、「ゲームCGIは禁止」って書いてるんですが・・・。
0442nobodyさん
02/04/13 10:28ID:???誤爆だろうけどスレ違い。
0445nobodyさん
02/04/13 13:07ID:VMPYMAwGが、できません。
1週間、ずーといろいろやったのですが、
どうしても、うまく行きません。
cgi-lib.plというのが悪いような気がするのですが…。
これって、定番のライブラリですが、
うまく日本語化する方法はないのでしょうか?
0446nobodyさん
02/04/13 13:28ID:sQBkSIs9うるせえんだよボケが!!!!!!!!!!!
0447nobodyさん
02/04/13 13:28ID:sQBkSIs9意味不明 氏ね!!!!
0449nobodyさん
02/04/13 13:35ID:PKxqXxULボタンをひとつだけ押して、複数のスクリプトにデータを渡すことは可能ですか?
ひとつはメールでもらって、その中のmailアドレスから自動でメルマガに登録させたい。
検索しようにもどんな語句で調べたらよいかわかりません。一応いろいろ検索したんですけど。
0450nobodyさん
02/04/13 14:06ID:VMPYMAwGフォームで入力された日本語が、
ちゃんと表示されないので、
それをちゃんと表示されるようにしたい。
jcode.plをreqireして、
&jcode…でコンバートしようとしても
うまくいかないのですが。
0451nobodyさん
02/04/13 14:20ID:???こっちでソース晒せよ。
http://pc.2ch.net/test/read.cgi/php/1012839651/l50
0452nobodyさん
02/04/13 16:24ID:x6G/BIRo$moto = 'a1b2c3d4e5';
$kekka = $moto ;
$kekka =~ s/[\d]//g ;
これ面倒なので、
$kekka = $motoの[\d]を削除した結果
みたいに1行で書けると嬉しいんですが。
0453nobodyさん
02/04/13 16:37ID:???($kekka)= $moto=~ /\d/;
0455nobodyさん
02/04/13 17:44ID:PKxqXxULメルマガ登録スクリプトにアドレスを渡したいんです。
どうせならアドレス一回入力で、「登録しますか」の是非をチェックしてもらい、そのアドレスを渡せたらいいなと思って。
引数にアドレスも付けてをつけてポップウィンドウを開くってのもありかなあ?
でもjsにたよらないとならなそうだし。
0457454
02/04/13 17:55ID:???メールを受け取ったら、自動でスクリプトを起動するってのはだめ?
メールを受ける鯖の/etc/aliasesに
melmaga-touroku: "| /path/to/script/regist.pl"
って書いて newaliases ってコマンド実行しておけば、
メールが来た時に、スクリプト起動できるので、
漏れいつもそうやってる。
0460nobodyさん
02/04/14 03:22ID:???これ、はやってんだ、漏れも使お、
へへへ、まんこ
0461nobodyさん
02/04/14 10:17ID:V1/8ijC1さっそく質問なのですが、
スカラーに入れた(入った)文字列をスカラー名にする方法ってあるのでしょうか?
$a = "test";
$b = "value";
として
$test = "value";
というようなことなのですが
よろしくお願いいたします。
0463nobodyさん
02/04/14 10:40ID:V1/8ijC10464461
02/04/14 10:42ID:V1/8ijC1ありがとうございました。
0465TOM ◆98SA9XcM
02/04/14 12:23ID:Gksq2mQe@mona1 = <LOAD>;
close(LOAD);
foreach (@mona1) {
($yakin,$hiroyuki) = split(/<>/);
if($yakin eq $FORM{'yakin'}) {
(?)
next;
}
}
え〜と、(?)の部分で、現在処理中の配列を、削除したいわけです。
ようは、配列をforeachで読んでいって、$yakinと、
送信されてきた(フォームから投稿されてきた)
$FORM{'yakin'}が一致した場合、現在処理している配列を削除したいわけです。
(?)の部分に、なんと入れたらいいのか、よろしくです
0467nobodyさん
02/04/14 12:45ID:???($yakin,$hiroyuki) = split(/<>/);
if($yakin eq $FORM{'yakin'}) {
$_ = '';
next;
}
}
@mona1 = grep /\S/, @mona1;
でいいかな? なんか無駄が多そうだが。
0468TOM ◆98SA9XcM
02/04/14 12:53ID:Gksq2mQeこれで、海へ行けるぞー!
0469nobodyさん
02/04/14 12:55ID:???サブルーチンはどのように書けばいいのでしょうか?
0470初心者
02/04/14 12:58ID:GNKyG6NlApacheっていうソフトを入れて、Webサーバっつーの立てて
そこでPerlをデバッグしてみてるんですが、簡単なSSIのアクセスカウンタが動いてくれません。
HTMLで「あなたは人目のお客様です」とだけ表示されます。
エラーログには何も書いてないし、DOSプロンプトでチェックしてもSyntax OKって出るだけっす。
カウンタの数字を保存するファイルのパーミッションの問題なのかな〜とか思ってるのですが、
Apache上のファイルのパーミッションを変える方法がわからんです。
昨日はじめたばっかしなので質問の意味がさっぱりかもしれませんが、よろしくです。
0473470
02/04/14 13:32ID:S6NECtrZc:\public_htmlにファイルを置いてやっているのですが、
いろいろ調べてみてもFTP転送時のパーミッション変更方法しか載ってなかったです。
格納ファイルのプロパティでアーカイブやら読み取り専用やら(Win98SE)、いろいろ変えてみたんですが
結果は変わらず。自分のPCなのにFTP転送とか出来るんでしょうか?
説明下手でごめんなさい。
0474TOM ◆98SA9XcM
02/04/14 13:45ID:Gt4aB1lkKEN○さんのページでわかりやすく解説載ってたし。
ttp://www.kent-web.com
0475_gunzip
02/04/14 13:47ID:???#!/usr/bin/perl -w
use strict;
our($a, $b);
sub mapup (& \@ \@)
#(code_ref $code, array_ref $_a, array_ref $_b)
{
my($code, $_a, $_b) = @_;
my @retval;
my $max_index = (@$_a < @$_b) ? @$_a : @$_b;
for (my $i = 0; $i < $max_index; $i++) {
local($a, $b) = ($_a->[$i], $_b->[$i]);
push @retval, $code->();
}
return @retval;
}
my @a = (1, 2, 3);
my @b = (0, 8, 7);
my @c = qw[ G C A T ];
my @d = qw[ C G T A ];
my @sum = mapup { $a + $b } @a, @b; # (1, 10, 10)
my @pro = mapup { $a * $b } @a, @b; # (0, 16, 21)
my @bigger = mapup { $a > $b ? $a : $b } @a, @b; # (1, 8, 7)
my @concat = mapup { $a . "-" . $b } @c, @d; # (G-C,C-G,A-T,T-A)
0476nobodyさん
02/04/14 13:53ID:IPbdNQdj丸見えなんですが。
0477nobodyさん
02/04/14 14:06ID:???> いらっしゃーい、Perlの「コーディング」で困ってる人のスレです。
>
> 1:自分はこう言う事がしたい。
> 2:それでこんな風にやってみたが・・・
> 3:それだとこんなエラーが出て上手く行かなかった。
>
> 1と3が無いと誰も答えられないよ、良い回答は良い質問から。
> 一緒に勉強しましょう。
0478nobodyさん
02/04/14 14:07ID:???で、ここ。
スクリプト改造工房 Part4
http://pc.2ch.net/test/read.cgi/php/1012839651/
0479472
02/04/14 14:11ID:???あぁぁ、Windowsならパーミッションは関係なさそう。
SSIの場合は、
1.apacheの設定ファイル(httpd.conf)でSSI(Server-parsed HTML)が
有効になってるか確認。
AddType text/html .shtml
AddHandler server-parsed .shtml
こんなかんじ。
2.SSIを使うhtmlファイルの拡張子が .shtml になってるか確認。
あとは、>>474に従うのもありかと。
0480470
02/04/14 14:13ID:S6NECtrZありがとうございました。本を買って入ってたのがApacheだったので、それを使ってました。
さっそくAnHTTPdを入れて勉強してみようと思います。
0481470
02/04/14 14:15ID:7rjAl4Ry丁寧にありがとうございます!
shtmlにはしてあるんですが、httpd.confをも一回チェックしてきます。
みなさん、親切で泣けてきました。(今回2Ch初書きこみ)
0482470
02/04/14 17:23ID:???カウンタが動作しました。HTTPdソフトのせいじゃなかったみたいです。
いろいろありがとうございました。
0483nobodyさん
02/04/14 18:32ID:lEj2Ud3E$line =~ s/椎名林檎/林 檎/g;
$line =~ s/志村けん/バカ殿/g;
上のようなのをハッシュにしてまとめて処理させることできませんか?
%xx = ( "田中雅夫", "田中さん", "椎名林檎", "林 檎" ,"志村けん", "バカ殿");
$nkeys = keys %xx;
$value = values %xx;
$line =~ s/$nkeys/$value/g;
自分ではこんな感じかな?とか思ったんですが…無理でした。
ご教授お願いします。。既出だったらすいません(^^;
0484nobodyさん
02/04/14 18:48ID:???$nkeysと$valueをprintしてみてなにが入ってるか見てみるとダメな理由はわかると思う。
どうするのが正しいのか俺にはわからないけど。
$line =~ s/(.+)/$xx{"$_"}/g;だとkeysの一致がされないしなぁ・・・。
0485nobodyさん
02/04/14 19:02ID:???$line =~ s/($hoge)/$xx{$1}/g;
こんなんでいいか?
0486nobodyさん
02/04/14 19:36ID:???_gunzipタンひさしぶり〜
0489nobodyさん
02/04/14 20:01ID:???ネタじゃないと思うよ。
理解できない負け惜しみ厨だとおもう。
そういう漏れも全然理解できてないので逝ってくる...
0490469
02/04/14 20:04ID:???0491nobodyさん
02/04/14 20:06ID:???while($line = <IN>) {
chomp($line);
%xx = ( "田中雅夫", "田中さん", "椎名林檎", "林 檎" ,"志村けん", "バカ殿");
#$nkeys = keys %xx;
#$value = values %xx;
#$line =~ s/$nkeys/$value/g;
$hoge = join "|", keys %xx;
$line =~ s/($hoge)/$xx{$1}/g;
print <<EOL;
$line
EOL
}
これで試してみたんですが無理でした(^^;
0492nobodyさん
02/04/14 20:32ID:???俺のところではそれでいけるけど、datafileの中身はどうなってるの?
あとPerlのバージョンは?
0493TOM ◆98SA9XcM
02/04/14 20:36ID:CWCI/F1H変数$nanashiに、
あ<>い<>う<>え<>お<>
と入ってるのですが、
この$nanashiを、
@giko = ("あ","い","う","え","お");
のように、配列に出来ますか?
0494nobodyさん
02/04/14 20:39ID:???0495TOM ◆98SA9XcM
02/04/14 20:44ID:CWCI/F1Hありがとん
0497nobodyさん
02/04/14 20:46ID:???<table>
<tr>
<td>田中雅夫</td>
<td>田中さん</td>
</tr>
<tr>
<td>椎名林檎</td>
<td>林 檎</td>
</tr>
<tr>
<td>志村けん</td>
<td>バカ殿</td>
</tr>
</table>
環境はWINにactiveperl522e入れてます。
flockとか使うとエラー出たりするし、
そういう違いなんかなぁ…
0498469
02/04/14 20:50ID:???決定!ばーか
0499nobodyさん
02/04/14 20:52ID:???0500nobodyさん
02/04/14 20:52ID:???やっぱり俺のところでは普通に変換される。
Win2kにanhttpd+ActivePerl-5.6.0.616。
flockはWin95やWin98じゃ使えないんじゃなかったっけ?
0501nobodyさん
02/04/14 20:59ID:???630あたり入れない?
0502497
02/04/14 21:02ID:???はい、そうみたいです。
他の違いとかは全く分からない状態で…
勉強不足ですいません(^^;
ActivePerlもけっこう前に入れたものだし、
新しいのinstallしてみよっかな。
とりあえず、ありがとうございました〜
0503nobodyさん
02/04/14 21:06ID:???両方EUCで書くこと。
0504497
02/04/14 21:08ID:???きちんと実行しました!!
申し訳ない…鬱だ。。
ほんとにありがとう…4日くらいハマってました(汁
0505497
02/04/14 21:17ID:???ハッシュの中に
"太宰啓介", "太 宰"
を入れてて、
これを抜いたら動きました。。
0506nobodyさん
02/04/14 22:07ID:???$hoge = "\Q". join("\E|\Q", keys %xx) . "\E";
0507nobodyさん
02/04/14 22:15ID:???の方が見栄えは良いな。
いや、>>506の方が多分効率良いけど。
0510rain
02/04/14 22:37ID:sltXes8xPERLのCGIを実行させようとすると何故かダウンロードを始めてしまいます。
どうなってるのでしょう?
0511nobodyさん
02/04/14 22:40ID:???99% Content-typeの問題。
0512rain
02/04/14 22:46ID:sltXes8xに何か問題があるのでしょうか?
0513497
02/04/14 22:49ID:???おー!動いた!ありがと〜
>啓の2バイト目が“[”だから動かない。
ふむふむ…もうついていけないレベルです(^^;
$hoge = "\Q". join("\E|\Q", keys %xx) . "\E";
$hoge = join "|", map{ quotemeta } keys %fuga;
これがどんなことしてるのか、
じっくり勉強してみます。
0514nobodyさん
02/04/14 22:57ID:???1:\nを\r\nにしてみる。
2:それをスクリプトの3行目に置いてみる。
0515rain
02/04/14 23:00ID:sltXes8xやっぱり変わらずダウンロードを開始します・・・。
何が原因なんでしょう?
0516nobodyさん
02/04/14 23:02ID:???環境を明記した上でスクリプトの拡張子を.txtにしてアプして。
0517rain
02/04/14 23:06ID:sltXes8x環境はapacheの1.3です。他に必要な環境情報ありますか?
------
#!D:/program/perl/bin/perl
print "Content-type: text/plain\r\n\n";
print "Hello Perl !";
------
0518nobodyさん
02/04/14 23:10ID:???httpdがApacheなら、httpd.confに
AddHandler cgi-script .cgi .pl
って書いてあるかどうかかくに〜ん。
0519rain
02/04/14 23:15ID:sltXes8x0520nobodyさん
02/04/14 23:19ID:???\r\n\nとはどういう了見だ?
■ このスレッドは過去ログ倉庫に格納されています