【Perl】初心者コーナー Part14
■ このスレッドは過去ログ倉庫に格納されています
0001nobodyさん
02/07/18 16:34ID:jemWJhH31:自分はこう言う事がしたい。
2:それでこんな風にやってみたが・・・
3:それだとこんなエラーが出て上手く行かなかった。
1と3が無いと誰も答えられないよ。
良い回答は良い質問から。一緒に勉強しましょう。
CGIだけど、なんか質問ある? Part 6 (その2)
http://pc.2ch.net/test/read.cgi/php/1025930486/
参考書籍の話題は【【Perl,CGI】参考書籍 第2版】
http://pc.2ch.net/test/read.cgi/php/988809842/
その他の雑多な話題は、【CGIに依存しないPerlの話題一般】
http://pc.2ch.net/test/read.cgi/php/991313362/
スクリプトの改造依頼は 【スクリプト改造工房 Part4】
http://pc.2ch.net/test/read.cgi/php/1012839651/
過去ログ、その他の役立ち情報は>>2-10あたりを見よう。
0548nobodyさん
02/07/29 20:54ID:???どうやって$FORM{'cmd'}に入れてるんだ?
勝手に入るとか思ってたりはしないよな?
まさかそこまで馬鹿じゃないよな?
夏とは言えそこまで馬鹿はいないと信じたいな。
0549nobodyさん
02/07/29 21:21ID:zYJTXqe4所有者がapacheとなります。この所有者は好きなのに変えられないのですか?
0550474
02/07/29 22:10ID:???マニュアルはperldocやweb等いろいろと見てみたのですが、全然ロックに関する
記述が無いんです。(T_T
しかし、dbと名が付いているくらいだからロックくらいはしてくれるだろう、
ということでとりあえずsdbmでやってみようかな、って思ってます。
でも微妙に気になる。(w
0551nobodyさん
02/07/29 22:15ID:???read(STDIN, $buffer, $ENV{'CONTENT_LENGTH'});
local(@pairs) = split(/&/,$buffer);
foreach $pair(@pairs){
local($name,$value) = split(/=/,$pair);
$value =~ tr/+/ /;
$value =~ s/%([\dA-Z]{2})/pack("H2", $1 )/eg;
$FORM{$name} = $value;
}
0553nobodyさん
02/07/29 22:45ID:7AOu/QAwをウマーク変えて
□□□(文字列)→<font color="#ff0000">★</font>
な感じに出来ないでしょうか?
0554nobodyさん
02/07/29 22:47ID:???0555nobodyさん
02/07/29 22:50ID:7AOu/QAwやり方を教えて頂ければこちら側としては非常にありがたいのですが…
0559nobodyさん
02/07/29 22:55ID:???いんたーなるさーばーえらー
0560nobodyさん
02/07/29 22:57ID:7AOu/QAwありがとうごだいます。
試してみます。
0562nobodyさん
02/07/29 22:59ID:om5W19We本はリャマ第2版、 Vine2.5+Bashでしゅ。
第三章の問題1ですが、要は、キーボードから
111
222
333
(C-d)←EOFを入れる。
と入力したら、
333
222
111
と表示するプログラムを書け、という主旨だと思います。
解答は、
print "Enter the list of strings\n";
@list = <STDIN>;
@reverselist = reverse @list;
print @reverselist;
となってます。オイラの答は、
@strigns = <STDIN>;
@result = reverse(@strings);
print "@result";
です。変数名と1行目は本論でないので置いとくとして、問題はこれを実行すると、
333
222
111
と2行目以下、行頭にスペースが入ってしまうことです。
違いは、print のトコで、" " で括るか、括らないかの違いなんすが、
この例では、" " はどのような役目を果たしているのでざんしょ?
それと、reverseの引数はカッコ無しでも有りでも変わらないようなのですが、
あっても無くてもいいのでしょうか?
よろしこおながいします。
0563nobodyさん
02/07/29 23:06ID:???わりぃ。
間違えてた。
$right =~ s/□□□/<font color="\#ff0000">★<\/font>/g;
0564555
02/07/29 23:08ID:7AOu/QAw再度トゥライしてみます。
0565555
02/07/29 23:19ID:7AOu/QAw出来ました。
本当にありがとうごだいました。
0566nobodyさん
02/07/29 23:20ID:???と言うか、配列を ” で囲んでprintfに投げると
デフォルトの区切り子を挿入しちゃうんですよ。
$. と $” だったかを弄って見れば分かる筈
@list = qw(hoge foo bar);
print @list;
print "\n";
print "@list";
0567nobodyさん
02/07/29 23:23ID:???"" は普通の文字列の書き方。変数展開とか \ のエスケープとか有りの。配列
変数も展開してくれるそうで。
3.7 配列を文字列中に展開する
「同様に、配列変数から…間にスペースをはさんで、順番に展開されます」
だそうです。実際には、特殊変数 $" の値で区切られるはず。"" で囲まずに
print する場合には、$, (デフォルトは空文字列) で区切られます。
> それと、reverseの引数はカッコ無しでも有りでも変わらないようなのですが、
> あっても無くてもいいのでしょうか?
この場合には無くてもいいけど、必要な場合もあるらしい。この辺は、漏れも
よく分らない。考えるのが面倒なので、大抵 () を付けるようにしてるけど。
0568562
02/07/30 00:12ID:hgHyxKDSなるほど。
$" と $, はまだ勉強していないのでよく分からないけど、
" " の有無による違いは何となく分かりました。
引数のカッコ、とりあえず付けとけば問題無し、ということで
原則かっこ付きで逝きます。
どうもありがとうございました。
0569nobodyさん
02/07/30 10:04ID:???@dataに
2<>名無しさん<>mail@***.com<>http://www.***.com/<>てすと<>てすと<>
1<>名無しさん<>mail@***.com<>http://www.***.com/<>てすと<>てすと<>
の2行がはいっていて1行目の「2」だけを取り出したいのですが
$no = (split(/<>/,$data[0])[0]);
とやってもできませんでした。どうやればいいのでしょうか?
0570nobodyさん
02/07/30 10:07ID:nD+VMZzMここでスレを調べなされ
0571nobodyさん
02/07/30 10:16ID:???所有者がapacheとなります。この所有者は好きなのに変えられないのですか?
0573nobodyさん
02/07/30 10:56ID:???@new = @old;
でいいですか?
試したら一応出来ましたけど。
0574nobodyさん
02/07/30 11:22ID:???これの \Q \E の意味が良くわからないです。
0575nobodyさん
02/07/30 11:30ID:???基本的に変えられませんが、mo-musu だったら変更可です。
やり方:
`chown mo-musu.mo-musu filename`;
0576nobodyさん
02/07/30 11:50ID:???www.kiwi-us.com/~mizusawa//penguin/DATA/dlcount/dlcount.cgi?file=macwwwsrch3097_fol.zip
&jcode'convert(*word, "sjis");
こうやったんですけどうまくいかないです。
0580576
02/07/30 13:37ID:???で、今は普通にSJISでperlを書いています。
>perl スクリプトを EUC-JP で書き, 漢字コードが EUC-JP である日本語を処理するというのが、
>perl で日本語を扱うときに一番問題が起きにくい方法です。
という事はスクリプトを保存する時のコードをEUCに変更した方がいいんでしょうか。
FORMのデコードも全部EUCに変換しなきゃいけないですよね。
0582576
02/07/30 13:59ID:???0584nobodyさん
02/07/30 19:11ID:???aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
と長い半角文字を入力すると記事を表示する枠が勝手に広がってしまいます。
どうすれば枠の幅はそのままで記事は改行されてきれいに収まるように出来るでしょうか?
したり、見た人のホスト名を記録するフリーのPerlを探してます。
どこかにありませんか?教えてください。
プログラムは組めませんが、設置する基本的な知識はあります。
よろしくお願いします。
0587nobodyさん
02/07/30 21:00ID:???だけど検索することはできないんだね
0588nobodyさん
02/07/30 21:11ID:w4X2IPfe0589nobodyさん
02/07/30 21:24ID:???検索してるんだけど、見つからないんだな。
カウントするヤシはイパーイあるんだけど、ログを残すのが無い。
>>590
どこで聞けばいいのだ?
プログラム板は初めてで、初心者の文字があったもんで・・・
0592nobodyさん
02/07/30 23:08ID:???my $hoge;
my $hoge2;
と
my $hoge, $hoge2;
はどう違うんですか?
検索もして自分でも試しましたが答えを見つけることが出来ませんでした。
ご教授お願いします。
0593nobodyさん
02/07/30 23:56ID:???って、全然違うじゃん。
> my $hoge, $hoge2;
myが効いてるのは$hogeだけ。my( $hoge, $hoge2);で上と同じ。
0595nobodyさん
02/07/31 01:01ID:???523 名前:nobodyさん 投稿日:2002/07/28(日) 21:18 ID:???
クソの分際で生意気なチンポ猿だな全く
ムカつくぜ
0597nobodyさん
02/07/31 01:24ID:S7Hc+7gV@X = ("A","B","C","D")
があって、BとCの間にEをつっこむ何かよい手はないでしょうか。
結果的に、
@X = ("A","B","E","C","D")
を作りたいのです。よろしくお願いいたします。
0598nobodyさん
02/07/31 01:39ID:I1Mr+tD00600nobodyさん
02/07/31 02:54ID:???これ以外でWEBページを取得する方法はありますか?
現在借りているサーバーにはモジュールがありやがりやせん。
0601nobodyさん
02/07/31 03:06ID:???面倒なのでコピペ
お前これみて分るか?
use Socket;
$r1=shift(@ARGV);
$html=shift(@ARGV);
$port = 80;
$host = "$r1";
$filename = "$html";
$ipaddress = inet_aton("$host");
$address = pack_sockaddr_in($port,$ipaddress);
socket(SOCKET,2,1,0);
connect(SOCKET,$address);
select(SOCKET);
$ |= 1;
select(STDOUT);
print SOCKET "GET $filename HTTP/1.0\r\n";
print SOCKET "HOST: $host";
print SOCKET "User-Agent: Q51-A";
print SOCKET "Accept-Encoding: gzip";
print SOCKET "\r\n\n";
while(<SOCKET>){
print $_;
}
0602nobodyさん
02/07/31 03:13ID:???LWPは標準モジュールじゃないです。
ActivePerlとかLinuxのディストリには入ってるがな。
ラクダ本くらいは買え。6章にソケット例が書いてある。
0603nobodyさん
02/07/31 03:30ID:y5qu4VWq$a = "abcd";
$a = strlen($a);
echo ("$a\n");
という風な記述をすると思うのですが、これをperlに置き換えたい場合はどの様にすれば宜しいのでしょうか?
0604nobodyさん
02/07/31 03:35ID:???通常であればシェルで
edquota ユーザー名 (Enter)
でエディタが起動して
Disk quotas for user okada (uid xxx):
Filesystem blocks soft hard inodes soft hard
/dev/hdax xxx xxxx xxxx xx x x
上記のテンプレートを編集する事になるのですが、
これを Perl のスクリプトで変更することはできないのでしょうか?
exp) perl ./edquota.pl ユーザー名 blocks値 soft値 hard値 inodes値 soft値 hard値・・
Linux Slackware8.0
Perl5.6 を使用しております。
それでは宜しくお願いいたします。
0607nobodyさん
02/07/31 07:53ID:y2pKIymG示して頂いた例通り(変数名は別のものですがw)試して、巧く機能させる事が出来ました。お蔭さまで助かりました。
何分、糞imodeに対して別途"Content-Length"値を与えなならんと聞いたものですから‥
0608nobodyさん
02/07/31 07:55ID:???0610nobodyさん
02/07/31 08:49ID:???CSSスレで聞け。
0611nobodyさん
02/07/31 09:13ID:phubboAlこれを見れない原因として、何が考えられますか?
0612nobodyさん
02/07/31 09:24ID:???1:自分はこう言う事がしたい。
2:それでこんな風にやってみたが・・・
3:それだとこんなエラーが出て上手く行かなかった。
1と3が無いと誰も答えられないよ。
良い回答は良い質問から。一緒に勉強しましょう。
0613nobodyさん
02/07/31 09:35ID:qpj2RbUE本体からの呼び方の
決まりが書いてあるページが見つかりません。
教えて下さい。
0614613
02/07/31 10:35ID:qpj2RbUE同じファイルにサブルーチンを書いて呼ぶ方法はわかります
別のファイルにサブルーチンを書いて呼び出したいんです
0616nobodyさん
02/07/31 11:51ID:UyjmARAzppm install http://theoryx5.uwinnipeg.ca/ppmpackages/mod_perl.ppd
でwin2000にmod_perlを組み込みたいのですが、、
Error installing package 'http://theoryx5.uwinnipeg.ca/ppmpackages/mod_perl.ppd'
: Could not locate a PPD file for package http://theoryx5.uwinnipeg.ca/ppmpackag
es/mod_perl.ppd
このようなエラーが出ます。URL移動したのでしょうか?
0617nobodyさん
02/07/31 11:58ID:???サーバがメンテ中とかやないの?
0618nobodyさん
02/07/31 12:32ID:???詳細は省き、必要最低限のみ。
サブルーチンの書かれたファイルをSub.pmとする。
その中のサブルーチンをsubとする。
本体の頭に
use Sub qw(sub);
呼ぶときは単に
sub();
サブルーチンファイルの頭に
package Sub;
use Exporter;
@ISA = qw(Exporter);
@EXPORT_OK = qw(sub);
とやって、あとは普通に定義する。
sub {}
0619nobodyさん
02/07/31 12:39ID:???>> my $hoge, $hoge2;
ラクダ本216より
この演算子(my)はコンマよりも優先順位が高いので、2個以上の変数を指定する場合
には、変数の並びをカッコで囲まなければならない。
0621613
02/07/31 12:46ID:???で、できますた!
test_sub.cgiの記述
sub test{print"てすと";}
1;
test.cgiの記述
#!/usr/bin/perl
require './test_sub.cgi';
&test;
>>618様
更に高度な技のご伝授で感激です。
これから解析して勉強します。
お二神様ともありがとうございます。
0622nobodyさん
02/07/31 13:27ID:???1:自分はこう言う事がしたい。
2:それでこんな風にやってみたが・・・
3:それだとこんなエラーが出て上手く行かなかった。
1と3が無いと誰も答えられないよ。
良い回答は良い質問から。一緒に勉強しましょう。
過去ログ、その他の役立ち情報は>>2-10あたりを見よう。
0623nobodyさん
02/07/31 13:31ID:???if($tmp[2] eq $name && $tmp[6] eq $comment) {&error("二重投稿はできません");}
とやったのですが反応しないため
if(($tmp[2] == $name) && ($tmp[6] == $comment)) {&error("二重投稿はできません");}
とやったらできるようになりました。
しかし他の人のコードを見ると前者のようにしてあるのですが
なぜか自分のでは反応しませんでした。
原因がなにかわからないでしょうか?
0624nobodyさん
02/07/31 13:31ID:PJX78SBC$tmp[6]には1番最近書きこまれた記事のコメントが格納されています。
ログファイルに書きこむ際は
my($tmp) = "$no<>$subject<>$name<>$email<>$url<>$time<>$comment\n";
open(DATA,">$logfile") || exit;
unshift(@data,$tmp); print DATA @data; close(DATA);
のようにしています。
一番最近書きこまれた記事の投稿者名やコメント情報は
open(DATA,"$logfile") || exit;
my(@data) = <DATA>; close(DATA);
my(@tmp) = split(/<>/,$data[0]);
のようにして取り出しています。
0625nobodyさん
02/07/31 13:34ID:???\nの扱いがどうなってるかだな。
ログの保存を
my($tmp) = "$no<>$subject<>$name<>$email<>$url<>$time<>$comment<>\n";
に変えて、上の方法にしてみたら?
0627nobodyさん
02/07/31 13:39ID:???0628nobodyさん
02/07/31 14:05ID:???$template->param('ROW',[
{ name => 'Bobby',
nicknames => [
{ name => 'the big bad wolf' },
{ name => 'He-Man' },
],
},
],
);
みたいな処理だと、変数の数が必然的に決まってしまうんで
配列を使って、ネストしたnicknamesに入れるハッシュの数を自由に操作したいんですけど、
0629nobodyさん
02/07/31 14:06ID:???while (@name) {
my %row_data;
$row_data{'NAME'} = shift @name;
push(@nicknames, \%row_data);
}
$name = 'Bobby';
$nickname = 'He-Man';
my %row_data;
$row_data{'NAME'} = $name;
$row_data{'NICKNAME'} = $nickname;
push(@loop_data, \%row_data);
まではいいんですが、@loop_dataに@nicknamesを入れるにはどうすればいいんですか?
push(@loop_data, \@nicknames); などではダメですが
それとも他に配列をネストするための何らかの方法が?
0630nobodyさん
02/07/31 14:12ID:PJX78SBCmy($tmp) = "$no<>$subject<>$name<>$email<>$url<>$time<>$comment<>\n";
こうやってみたんですがだめでした。
0632nobodyさん
02/07/31 15:11ID:PJX78SBCmy(@tmp) = split(/<>/,$data[0]);
$tmp[6] =~ s/\n//;
if($tmp[2] eq $name && $tmp[6] eq $comment) {&error("二重投稿はできません");}
というようにしろということでしょうか?
0633nobodyさん
02/07/31 15:22ID:PJX78SBC0634nobodyさん
02/07/31 15:33ID:???あんたの財布の中身は他人には解らん
変数の中全部吐き出してみろよ
0635comeoneverybody
02/07/31 16:20ID:JJGI7Csk添付ファイル付きメールををセンドメールで送るんですが、
@filesの部分に添付ファイルを入れれます
stdio::sendmail(\%header, $body, $html_body, 0, @files);
こうするとうまくいかないのですが、プログラムの別の部分で
@filesの中身を吐き出してやって、コピペしてやるとなぜかうまくいきます。
stdio::sendmail(\%header, $body, $html_body, 0, '../../aaa.txt',);
すごく単純なことだと思うのですが、なにか解決のヒントください。
おながします。
0637nobodyさん
02/07/31 16:38ID:PJX78SBC1<>書き込みテスト<>名無しさん<>***@***.com<>http://www.***.com/<>2002/07/31 15:14:19 (Wed)<>書きこみテスト<>
です
0638comeoneverybody
02/07/31 16:47ID:JJGI7Cskすると配列そのものを羅列させるには
stdio::sendmail(\%header, $body, $html_body, 0, "@files");
とするべきということですか?
0639nobodyさん
02/07/31 16:53ID:???http://server.maido3.com/
へ飛ばされるんだけど俺だけ・・?
0640nobodyさん
02/07/31 17:05ID:???web powerのstdio.plライブラリーですか。
sendmailのパスが無いようなきがするけど。
その@fileの内容が知りたい。
0641nobodyさん
02/07/31 17:06ID:???0642comeoneverybody
02/07/31 17:13ID:JJGI7Csk>web powerのstdio.plライブラリーですか。
あ、そうです。
sendmailのパスはとうの前に記述してます。
ですから、添付されて無いメールは届きますし、
@filesの中身を吐き出してコピペするとちゃんと添付されて届くんですよ。
中身は
'../aa/1234.txt', '../aa/1235.txt', '../aa/1236.txt',
こんな感じです。
0643nobodyさん
02/07/31 17:33ID:9/C2v2FPタグが禁止なので<,>は<と>に直してデータに保存しています。
で、投稿内容を表示する時は、
$naiyou =~ s/<br>/<br>/g;
こういう感じで改行部分だけ直して表示してます。
で、投稿内容を修正する機能があって<textarea>$hoge</textarea>
という感じで表示して入力してもらいます。
この時、逆に文字の中に<br>が入ってしまって変です。
なので今度は<br>を改行コードに戻して表示しなきゃいけません。
改行コードはOSによって違うので
$naiyou =~ s/<br>/\n/g; # unix
$naiyou =~ s/<br>/\r\n/g; # win
$naiyou =~ s/<br>/\r/g; # mac
という風にOSによって書き分けないといけないですよね?
OSはジャバスクリプトで分ければいいってことでしょうか。
0644nobodyさん
02/07/31 17:34ID:???これかな、何か間違えてるんじゃ無いの?
(\%header, $body, $html_body, 0, '../aa/1234.txt','../aa/1235.txt', '../aa/1236.txt');
こうしたらどうなるの?
0647480
02/07/31 18:12ID:???「コテハンの騎士は一人残らず皆殺しだ(´・ω・`)」(←SWのみすぎ)
ム板Perl6スレでの君の活躍は見事だ。放置プレイマンセーだな(少尿
>>490
あぁ俺英語読めんからいまだにコンパイルできん。
だいたいnmakeうってもできんぞ。詳しく教えろ。
■ このスレッドは過去ログ倉庫に格納されています