【Perl 】初心者コーナーPart7
■ このスレッドは過去ログ倉庫に格納されています
0001名無しさん@お腹いっぱい
01/09/12 13:04ID:???1:自分はこう言う事がしたい。
2:それでこんな風にやってみたが・・・
3:それだとこんなエラーが出て上手く行かなかった。
1と3が無いと誰も答えられないよ、良い回答は良い質問から。
一緒に勉強しましょう。
参考書籍はこちら【【Perl,CGI】参考書籍 第2版 】
http://corn.2ch.net/test/read.cgi?bbs=php&key=988809842&ls=50
CGIの質問はこちら【CGIだけど、なんか質問ある?part3】
http://corn.2ch.net/test/read.cgi?bbs=php&key=988727833&ls=50
過去ログ、その他の役立ち情報は>>2-5を見よう。
0560丸出し
01/10/03 20:34ID:???indexのが早いんですか!
ある配布cgiで検索機能があったんですけど
半角全角を一緒にして検索できる便利さを捨てて
鯖の負荷を減らす方をとったのか。
なるへそ〜〜。ありがとです。
0561名無しさん@お腹いっぱい。
01/10/03 20:50ID:VH/5AUngREMOTE_HOSTをgethostbyaddrでIPからアドレスに変換したのですが
変換するとpop3.norton.antivirusと表示されます。
これって何でしょう?間違ってはないと思うのですが…
識者の方でご存知のかたおられましたらお願いします。
0562名無しさん@お腹いっぱい。
01/10/03 20:59ID:???気にスンな
気になるならセキ板でもいって「ハックされていますっ!!!!」
ってスレ立てて死んでこい w
0563名無しさん@お腹いっぱい。
01/10/03 22:33ID:???言う意味で書いています($で始まるの色々ありますよね)。
0564名無しさん@お腹いっぱい。
01/10/03 22:43ID:???0565名無しさん@お腹いっぱい。
01/10/03 22:53ID:???そのためのやつでしょ。
0566名無しさん@お腹いっぱい。
01/10/03 23:37ID:CQyY2Ec6Perlで定期的に送信フォームを押すみたいなことはできますか?
つか、初心者はその前にこれ覚えれみたいなことありましたら指摘お願いします。
0567名無しさん@お腹いっぱい。
01/10/03 23:38ID:???まず日本語を勉強してね &heart
0570名無しさん@お腹いっぱい。
01/10/03 23:50ID:???>>1周辺を見ろ。
方言使うな。
0572名無しさん@お腹いっぱい。
01/10/03 23:59ID:???ちょっと漠然としすぎてて答えようが無いよ
この板に良書スレが有るから、そこを良く読んで自分に合った
本を一冊買って下さい。
で、それを読みながらWEBなんかも活用して勉強すればいいよ。
それといきなりCGIは薦めないな、、少しはPERL書けるようになって
HTMLも書けるようになれば自然と書ける様になるから
0573566
01/10/04 00:21ID:???ありがとうございます。
全然右も左もわからないもので・・・
以前age荒らしをスクリプト組んでやってる、というのを見て、
プログラミングに興味を持ったのですが、(荒らしをしたい訳じゃないんです。断じて)
例えは悪いですが、そういうことはできるのか知りたかったんですが、
これでもまだ漠然としているんでしょうかね・・・
とりあえず、勉強して出直してきます。有り難う御座いました。
0574名無しさん@お腹いっぱい。
01/10/04 00:24ID:???0575名無しさん@お腹いっぱい。
01/10/04 00:30ID:???関係ないけどね。頑張ってね。
0576510
01/10/04 02:08ID:f1gid5yYえびさん
遅くなりましたが、詳しいお答えありがとうございました。
・・・精進します・・・。
0577名無しさん@お腹いっぱい。
01/10/04 08:23ID:9Z2wk3j2明確な目標を持った厨房のほうが好きだね。俺は。
つーわけで>>566みたいな奴には期待したい。
(1)ローカルマシンにPerlとWebサーバを入れる。
(2)全環境変数表示CGIを自作し、Webサーバで動かす。
(3)GETメソッドで(2)のCGIにアクセスしてみる(LWP::Simpleモジュールが便利)
(4)POSTメソッドで同じく(2)にアクセス(LWP::UserAgentモジュール)
とりあえ、以上の実験を試してみることをすすめる。
0578名無しさん@お腹いっぱい。
01/10/04 08:41ID:???残念賞として"$."(現在の行番号)をあげよう。
while (<DATA>) { print "$. $_"; }
__DATA__
mona
giko
0580名無しさん@お腹いっぱい。
01/10/04 11:35ID:nOAoqb9AHTMLA → CGI の、HTMLAのURLです
0581名無しさん
01/10/04 11:37ID:???0582名無しさん@お腹いっぱい。
01/10/04 13:23ID:nOAoqb9A空白になっちゃうんです。うううむ。
0583名無しさん@お腹いっぱい。
01/10/04 13:28ID:???0585名無しさん@お腹いっぱい。
01/10/04 15:33ID:???てか、えらそうに書いたの俺なんすけど。
正規表現スレ逝って修行してきます・・・。
0586名無しさん@お腹いっぱい。
01/10/04 16:14ID:???9 div 4 = 2
9 mod 4 = 1
のdivです。
0587名無しさん@お腹いっぱい。
01/10/04 16:31ID:???0588名無しさん@お腹いっぱい。
01/10/04 16:33ID:???0589名無しさん@お腹いっぱい。
01/10/04 16:52ID:4x063qa6Perlからアクセスすることは可能でしょうか?
出来る場合、相対パスでアクセスするのでしょうか??
0590名無しさん@お腹いっぱい。
01/10/04 16:55ID:???あ。divはないんですね。
%があるのに変だなぁと思って探してたんです。
#9-(9%4)とかやってたですよ。鬱。int()でいいんだ…
0591名無しさん@お腹いっぱい。
01/10/04 17:41ID:???いまいち動作がわかってないんだが。
{ use integer; $foo = 9 / 4; }
または
use integer; $bar = 9 / 4; no integer;
0592名無しさん@お腹いっぱい。
01/10/04 17:44ID:???可能である。
相対パスでも絶対パスでも。ただしURLじゃなくてOSのパス。
0593名無しさん@お腹いっぱい。
01/10/05 00:35ID:???my と local の違いが良くわかりません。どう使い分けるべきなのでしょう。
0594名無しさん@お腹いっぱい。
01/10/05 05:47ID:???一口には説明できないけど、まず".pl"と".pm"の表面的な違い。
●Hoge.plファイル
require 'Hoge.pl'; で読み込む。
実際はどんな拡張子でもいいが慣例として".pl"が使われる。
requireでは、この命令を実行する時点でファイルが読み込まれる。
必要なときのみrequireするようにうまくコードを書くと
無駄なメモリを使わずにすむ。
● Hoge.pmファイル
拡張子".pm"の扱いは特別で、
use Hoge ('mona','giko'); と書くのは、
BEGIN{ require 'Hoge.pm'; Hoge->import('mona','giko'); }
と書くのと同じ。
BEGINブロック相当なので、コード中のどこにuse Hogeを書いても
Hoge.pmは起動時に必ず読み込まれる。
決して実行されない位置、たとえばif (0) { use Hoge; } でもね。
さらに自動的に実行されるHoge->import()を利用して各種の初期設定が可能。
importメソッドをどう使うかは自由だけど、普通はHogeクラスを
メインプログラムから簡単にアクセスするための設定とかを書く。
#まだ言ってることワケワカだろうけど、そのうちわかる。
0595名無しさん@お腹いっぱい。
01/10/05 11:28ID:QBNm.OW.どのようにしたら良いでしょうか。
また、ゴミデータ(エディタで表示できないような文字)の
判別方法はありますか?
0596名無しさん@お腹いっぱい。
01/10/05 11:44ID:Cx9AZXvIJcode.pmを入手して使うと楽。
日本人が作ったやつだけど、CPANにあるっけ?調べてみて。
use Jcode;
my $s = "まあ聞いてくれよ、スレと関係あるからさ。\n";
print Jcode->new(\$s, 'sjis')->utf8;
何がゴミデータかというのはエディタにもよるから。どのエディタ?
0597596
01/10/05 11:46ID:???環境でないとだめだったかも。。。
Windows用ならコンパイル済みのやつがある。
0598名無しさん@お腹いっぱい。
01/10/05 11:51ID:???c:/bin/
こんなの?
0599名無しさん@お腹いっぱい。
01/10/05 12:32ID:???そんなの。unix系は"c:"なしで。
0600名無しさん@お腹いっぱい。
01/10/05 13:07ID:QBNm.OW.ゴミデータってのは、制御コードのようなものとか、
文字コードが判別できないような「F・カ」みたいに表示されて
しまうものとか。そういったデータのことです。
エディタによって表示が違うのはその通りですね(^^;
0601名無しさん@お腹いっぱい。
01/10/05 18:48ID:???$hash{'Micro$oft'} = "VVindovvs";
foreach(keys %hash) {
$data =~ s/$_/$hash{$_}/;
}
print $data;
この場合 "Micro$oft" に含まれる "$" がパターンと見なされて
うまく置換できません。どのような回避方法が考えられるでしょうか?
自分ではパターン文字列でメタ文字と見なされてしまう文字列を
あらかじめエスケープする置換処理を挿入しているのですが
あまりスマートとは思えません。
パターン部の変数展開を一度だけ行ってくれるといいんですが。
「o」では期待した動作が得られませんでした。
0602名無しさん@お腹いっぱい。
01/10/05 18:51ID:???0603名無しさん@お腹いっぱい。
01/10/05 19:22ID:???$data = 'hogehogeMicro$ofthogehoge';
%hash = ( 'Micro$oft' => "VVindovvs", 'hoge' => '[ピー]' );
$re_keys = join('|', map { "\Q$_\E" } keys(%hash));
$data =~ s/($re_keys)/$hash{$1}/go;
print $data;
0604名無しさん@お腹いっぱい。
01/10/05 23:37ID:QBNm.OW.Jcodeをppmでインストールしようとしたら
>Installing package 'Jcode'...
>Error installing package 'Jcode': Read a PPD for 'Jcode',
>but it is not intended for this build of Perl
>(MSWin32-x86-multi-thread)
というメッセージが出てきてしまいました。バージョン違い?
CPAN逝ってきます。
0605名無しさん@お腹いっぱい。
01/10/06 00:32ID:MEgHrhMkうわーん。
http://search.cpan.org/search?dist=Jcode
>FAIL MSWin32-x86-multi-thread
ってのはWinはダメの意でしょうか。かなりしょんぼり。
0606名無しさん@お腹いっぱい。
01/10/06 00:47ID:???すみません。
http://openlab.ring.gr.jp/Jcode/index-j.html
にありました。
0607名無しさん@お腹いっぱい。
01/10/06 08:38ID:xcBMND.sデータを記録する時の区切り文字には定番だったり
慣例のものとかってあるんですか?
よく目にするのが<>だったり\tだったりしますが?
教えてくらはい。
0608名無しさん@お腹いっぱい。
01/10/06 10:51ID:32vtXsHYUNIXみたいに#! /usr/local/bin/perl(コマンドライン?)
というのを使える様にするにはどうすればいいんでしょうか?
ちなみに、perlソフトはActive Perlです。
教えて君初心者ですみません。。
0609名無しさん@お腹いっぱい。
01/10/06 10:56ID:???エクセルとか意識するならCSVは忘れない方がいいんじゃないかな
\tはTSVって言ってCSVの親戚みたいなもんか。。
<>が使われるのは多分BBSとかのログは大抵タグがエスケープされてる
から、デリミタ混入→ミスヒット、の可能性が低くなるからだと思う
0610名無しさん@お腹いっぱい。
01/10/06 11:09ID:xcBMND.sなるほど!<>にはそういう意味があったんですか!
どうもありがとうございます。
TSVってのは知りませんでした。
メモ帳とかで開くとタブで区切っとけば
見やすいからだと思てた・・・。
0611名無しさん@お腹いっぱい。
01/10/06 11:10ID:???入手にちょいと苦労するがむっちゃ便利なプログラムがある。
ベクターで「SOS」を検索してみ。
0612名無しさん@お腹いっぱい。
01/10/06 11:28ID:xcBMND.sこれの事ですかね?
PERLで書いたスクリプトをcなんかの様に実行形式に
コンパイルできるソフトって無いものですか?
あるにはあるけど正確じゃない。みたいな事は耳にするのですが?
どうなんでしょう?
0613名無しさん@お腹いっぱい。
01/10/06 14:14ID:???Cygwin入れたらいい
これで一件落着
0614608
01/10/06 17:41ID:PN8fPnr6それを入れたら良いとか本に書いてあったんですが
ダウンロードサイトに行ってみたら、どうやら金取られるみたいで..
611さんの言うのもダウンロードしたのですが
どうやってパッチを当てるかいまいちわからなくて..。
ほんと、難しいですよね...鬱
0615名無しさん@お腹いっぱい。
01/10/06 18:51ID:???もっと健作白〜〜〜
何をそんなに焦っているのか? 今日納期の仕事してる訳じゃ無いだろ
実際Unixのshellに触る事は回り道でもなんでも無いんだぞ
って9xで使えたかな (・∀・;)??
0616名無しさん@お腹いっぱい。
01/10/06 19:46ID:???http://cygwin.com/setup.exe
これ落とせ
んで、どっかに移動してから起動して、それで適当にサーバー選んで落としてこればいい
0617614
01/10/06 20:26ID:w30D7B7.どうもありがとうございんます。。
どっかに移動して起動して、というのはどういうことでしょうか?
ディスクトップに解凍するのでいいのですか?
あと、大変失礼な質問なのですが
そのファイルは大丈夫なのでしょうか?
拡張子がexeなので心配で...
0618名無しさん
01/10/06 20:36ID:???まずWIN板に行ってファイル操作や圧縮解凍に付いて学びましょう
>あと、大変失礼な質問なのですが
>そのファイルは大丈夫なのでしょうか?
>拡張子がexeなので心配で...
憶測ですが、おそらく616氏はsetup.exeのAUTHORでもcygwin.comのサーバ管理者でも
無いと思われますので何がどう大丈夫なのかは分からないでしょう
0619617
01/10/06 21:58ID:w30D7B7.すみません、実はP検3級のOSはAなんです(w
解凍とかもたまにUGにいくのである程度はわかるのですが
でも、やっぱり深く掘り下げると難しくて。。
一瞬ウィルスだと思ったんですがアドレスが違うみたいですね。
ちょっとexeファイルに過敏になっていたもので..。
もう少し勉強してまた、質問させていただきます。
0620名無しさん@お腹いっぱい。
01/10/06 22:12ID:???0621名無しさん@お腹いっぱい。
01/10/06 22:22ID:w30D7B7.解凍するソフトの種類や拡張子の種類はわかりますです。
0623名無しさん@お腹いっぱい。
01/10/06 23:29ID:tXZdOs1cファイルからデータを読みだし、そのデータを含むHTMLを
ブラウザに表示させるスクリプトを書きました。
TELNETのコマンドライン上から実行すると
狙いどおりの出力をしてくれるのですが、
ブラウザ上からURLを入力して実行すると
500 Internal Server Errorがでてしまいます。
パーミッションなども確認したのですが
おかしなところは見当たりません。
何かチェックすべきところが他にあるのでしょうか。
0624名無しさん@お腹いっぱい。
01/10/06 23:43ID:???0625623
01/10/06 23:46ID:tXZdOs1cHTMLの直前に書きました。
0626名無しさん@お腹いっぱい。
01/10/06 23:51ID:???print "Content-Type: text/html\n\n";
0627623
01/10/06 23:51ID:???でした。自分で書いて気がついた。
助かった〜ありがとうございました。
0628626
01/10/06 23:52ID:???0629たかちゃん
01/10/06 23:54ID:j.NzGGwA初心者ですが、cgiを設置したのに見ると
CGI エラー - 以下のコマンドラインを実行できません : "perl C:\kujira\aska.cgi ", errorcode = 2, No such file or directory
と出るのですが、どうしてでしょうか?
お願いします
おしえてください
0630名無しさん@お腹いっぱい。
01/10/06 23:55ID:???0631名無しさん@お腹いっぱい。
01/10/07 02:00ID:???助けてやって下さい。
0632名無しさん@お腹いっぱい。
01/10/07 02:12ID:???CGI速くするだけなら別の方法もあるよ。
0633名無しさん@お腹いっぱい。
01/10/07 14:43ID:???1番目から10番目を逆順で処理してると思うんですが、
逆順にしてから1番目から10番目を取得するにはどうしたらいいでしょうか。
つまり、
1-30のうち
10,9,8...,2,1ではなくて、
30,29,28...,22,21と取得するということ。
0634名無しさん@お腹いっぱい。
01/10/07 14:44ID:jXvc6whkperlccですか!ありがとうございます。
けどやっぱcとかみたいにうまくコンパイルできないとか
言う話をちらほら聞いた事あるんですけどどうなんでしょう?
>CGI速くするだけなら別の方法もあるよ。
良かったら教えて欲しいっす!!
どんなんでしょう?
0635名無しさん@お腹いっぱい。
01/10/07 15:15ID:???スライスの使えばOK.
(reverse 1..30)[0..9]
0636名無しさん@お腹いっぱい。
01/10/07 15:18ID:???あと、30から21がほしいだけなら、reverse21..30でもいいような。
0637JAPU@愛国戦隊大日本
01/10/07 16:13ID:???for($i = 30; 20 < $i; $i--) としても良いです。
>>634
mod_perl, SpeedyCGI など。Perl の場合は起動と構文解析に時間がかかるので、そのコストをおさえることができます。
0638名無しさん@お腹いっぱい。
01/10/07 16:22ID:???ありがとうございます。
んー。
@read[$hoge .. $moge]を逆順で処理させたくて、
$hoge = 0;
$moge = $hoge + 10;
foreach (reverse @read[$hoge .. $moge]){}
とやってみたのですが、
@readに仮に0-30のリストが入っているとして、
9,8,7,6,5,4,3,2,1,30という処理順になってしまいました。
むむむ…。一体どうすればいいのでしょう…。
0640635
01/10/07 16:30ID:???修正
> 9,8,7,6,5,4,3,2,1,30という処理順になってしまいました。
→ 9,8,7,6,5,4,3,2,1,0,30という処理順になってしまいました。
>>637
書き込んだらレスがついていたので慌ててお礼だけ書きましたが、、、
まず考えたのがそれだったんですが、作っているのが掲示板で、
リストの最後がいくつになるか判断するルーチンは今のところ無いんです。
ありがとうございました。
0641名無しさん@お腹いっぱい。
01/10/07 16:31ID:jXvc6whkサーバーで用いるインタープリタを変えるって事なのかな?
勉強になるです。ありがとうございました。
0642名無しさん@お腹いっぱい。
01/10/07 16:39ID:???実行形式にするのにはPerl2Exeってのもあるんですね。
知ってる人の方がおおいんだろうけど
自分見たいののために報告〜。
0643名無しさん@お腹いっぱい。
01/10/07 17:09ID:Hz5hclI2>→ 9,8,7,6,5,4,3,2,1,0,30という処理順になってしまいました。
いったいどうすれば、そんな処理順に・・・。
それをねらってやるほうが難しい(つーか面倒)なのでは。
0644名無しさん@お腹いっぱい。
01/10/07 17:53ID:???@a = (0 .. 30);
@a = reverse @a[-1 .. 9];
print "@a\n";
0645名無しさん@お腹いっぱい。
01/10/07 21:46ID:XxfLnDlQリネームが一番効果的っての聞いた事あんですけど。
DBMてのを使うのは無しで。
0646名無しさん@お腹いっぱい。
01/10/07 22:17ID:kSNrchYMずーと悩んでるけれど全然スマートな方法が思いつかないッす。
0647名無しさん@お腹いっぱい。
01/10/07 22:27ID:???flockだけど、、evalすらしてない w
>>646
二つしかないならループしなくて良いじゃん?
普通はkeysでkeyの配列作ってその配列をforeachしたり
eachしたり、、
@keys = keys (%hash);foreach (@keys)
while (($key,$value) = each %hash)
0648名無しさん@お腹いっぱい。
01/10/07 22:36ID:kSNrchYMでも、チョット違うかもしんない。
そういう意味でなら、キーがみっつて事になるかな。
$hashref->{1}->{2} = 3;
みたいな。
書き方はこれじゃなくても、何でもいいんで同様のことを実行できる方法ないっすかね。
0649名無しさん@お腹いっぱい。
01/10/07 22:48ID:???0650むぎ茶
01/10/07 22:55ID:???┐(´ー`)┌
┏━━━━━━━━━┓
┃('Д')y ─┛~~ ┃
┃むぎ茶 ┃
┃[email protected] ┃
┗━━━━━━━━━┛
0651名無しさん@お腹いっぱい。
01/10/07 22:58ID:kSNrchYM$hashref->{"key1-1"}->{"key1-2"} = "1-3";
$hashref->{"key2-1"}->{"key2-2"} = "2-3";
while (($key, $value) = each %hash) {
while (($key2, $value2) = each $value->{$key}) {
print $key, "=>", $value->{$key2}, "=>", $value2, "\n";
}
}
こーいうことがしたいの。
0652634
01/10/07 23:03ID:???未だに当初の目的は達成できません。
>>635を参考に>>638のようにしても無理なのですが、
どうすれば良いんでしょう?
0653名無しさん@お腹いっぱい。
01/10/07 23:04ID:???key1 => { key1-1 => 'val1-1' },
key2 => { key2-1 => 'val2-2' },
);
>>651
%$valueね。
0654名無しさん@お腹いっぱい。
01/10/07 23:08ID:???むっちゃありがとー。今夜はぐっすりねれそうだよー。
0655名無しさん@お腹いっぱい。
01/10/07 23:11ID:???0656名無しさん@お腹いっぱい。
01/10/07 23:26ID:???何言いたいのか解らん、上の方で言ってるのでなんで駄目なんだ
@list = reverse (0..30);
foreach (@list){
print "$_\n";
last if($cc == 10);
$cc++;
}
0657名無しさん@お腹いっぱい。
01/10/07 23:30ID:???こうだと推測してみた。正解なら俺をエスパーと呼べ。
@read = (0 .. 30);
$hoge = 0;
$moge = $hoge + 10;
foreach (reverse @read[-$moge .. -1-$hoge]) { print "$_\n"; }
■ このスレッドは過去ログ倉庫に格納されています