Perl 初心者コーナー Part24
■ このスレッドは過去ログ倉庫に格納されています
0001 ◆fBgbHI04bQ
03/06/07 22:30ID:GbQKLcPE【投稿する際の注意】
質問するときは内容をよく吟味してから投稿してください。
1:自分はこう言う事がしたい。
2:それでこんな風にやってみたが・・・
3:それだとこんなエラーが出て上手く行かなかった。
最低でも1と3が無いと誰も答えられないよ。
良い回答は良い質問から。一緒に勉強しましょう。
CGIだけど、なんか質問ある? Part 10
http://pc2.2ch.net/test/read.cgi/php/1048686475/
【Perl,CGI】参考書籍 第三版
http://pc2.2ch.net/test/read.cgi/php/1030209573/
CGIに依存しないPerlの話題一般/Part2
http://pc2.2ch.net/test/read.cgi/php/1030548610/
スクリプトの改造依頼は、【 スクリプト改造工房 PART 6 】
http://pc2.2ch.net/test/read.cgi/php/1047806915/
過去ログやお勧めサイトは >>2-10
0673nobodyさん
03/06/20 19:12ID:???http://pc2.2ch.net/test/read.cgi/php/1047806915/
のほうがいいんじゃん?
0676nobodyさん
03/06/20 19:35ID:???[]と{}の違いわかる?
0677nobodyさん
03/06/20 20:58ID:kJiV021K人います?。コンパイルはできるんだけど実行の時にあれやら
コレやらが足りないっていわれるんだよね。
つーか、いまいちよくわかんないなぁperl2exeって。
0678nobodyさん
03/06/20 21:01ID:1Z33Vqhm貴方のお店&サイトを効果的に宣伝できます!
お店の足取りが悪い・・・。私のサイトにはあまり人が来ない・・・。などお悩みの方は、
ぜひおすすめです。手軽&簡単しかも日本中に宣伝できますので、
大幅なアクセスアップが期待できます。
[料金について]
1日110円で宣伝&クーポン券の発行が出来ます。
年間契約で申込された場合、40,000円になります。
6ヶ月契約で申込された場合、25,200円になります。
3ヶ月契約で申込された場合、12,600円になります。
http://www.c-gmf.com/h17103.htm
ぜひ一度お試しになってみてはいかがでしょうか?
0679nobodyさん
03/06/20 22:06ID:Vg4M86DU#おはよう
#こんにちわ
お元気ですか?
#こんばんわ
おやすみなさい
と中に書かれているテキストの中の文字を、改行を<br>に変換して、
#で区切って配列に入れたいのですが・・・。
どうすればできるのでしょうか・・・( ・ω・)
0680nobodyさん
03/06/20 22:14ID:???内容もさることながら、質問の仕方もカスのような気がしますが。
1. \nを<br>に変換する。
2. splitにて、#区切りの配列を生成する。
3. shiftする。
のような手順でしょうかね。
0681nobodyさん
03/06/20 22:18ID:jiB8qm8t$text = <<'_END_';
#おはよう
#こんにちわ
お元気ですか?
#こんばんわ
おやすみなさい
_END_
$text =~ s/\n/<BR>/g;
@text = split(/#/, $text);
0682679
03/06/20 22:31ID:Vg4M86DUスイマセン、精進しまつ(;;)
>>681
ナルホド!! ・・・と思ってやってみたのですができない・・・。
$message = "./aisatu.dat";
open(FILE,"$message");
$text = <FILE>;
$text =~ s/\n/<br>/g;
@text = split(/#/,$text);
print "@text\n";
一行目の文字列しか出力されないです・・・( TÅT)
0683nobodyさん
03/06/20 22:33ID:jiB8qm8t$text = <FILE>;
これだと、1行しか読めません。
$text .= $_ while(<FILE>);
でいいと思います。
0684nobodyさん
03/06/20 22:52ID:Vg4M86DU.+゜(・∀・)+゜. 全部読んでくれました。
改行が<br>に変換されないのが気になるところですが・・・
あとは自分で調べてみます。
(TдT)ノシ アリガトウです
0685nobodyさん
03/06/20 22:53ID:???あー。
自分で調べるか、がんばれ。
改行コードがヒントだ。
0686直リン
03/06/20 23:10ID:Q1+dqLU80687nobodyさん
03/06/21 10:55ID:wNdBDwZ11:サムネイル画像の生成を行いたいです。
2:GDを使う方法を試してみたのですが、
3:標準で使える設定にはなっていないようで、エラーになりました。
何か手段はないでしょうか?
・ライブラリを同じとこに置いて使う??
(あまりよくわからないのですが調べててこんな方法があるのかな?
と思いました。)
・自分で画像縮小のアルゴリズムを組む。(ちと自信は無いですが)
ちなみにjpeg/png/(gif) などで行いたいです。手助けお願いします。
0689無料動画直リン
03/06/21 12:10ID:AstYoKnr0690687
03/06/21 12:57ID:wNdBDwZ1(GD,PerlMagickはインストールっぽいので。)
jpegだけでも縮小処理をしたいです。(他 gif/png)
0692687
03/06/21 15:21ID:fPD3+uod0693nobodyさん
03/06/21 15:22ID:zsFEWp+Jあきらめれ。
0695687
03/06/21 16:32ID:fPD3+uodたとえば require "GD"; ってのではやっぱし動かないんですよね?
さっきGDの中身を見てたんですが、一部わからない所もありました。
誰か同じことを考えて、インストール無しで使えるGDを公開してる人って
居ないんですかねぇ・・・
0696_
03/06/21 16:42ID:???0697nobodyさん
03/06/21 17:26ID:VyXOk/2cchomp($temp);
print "$tempが入力されました\n";
}
これだとABCDと入力したら ABCDが入力されました、と出て、
while ($temp = <STDIN>) {
$temp2 = chomp($temp);
print "$temp2が入力されました\n";
}
これだとなぜか、1が入力されました、としか出ないのはなぜですか?(´・ω・`)
教えてエロイヒト
いろいろな本を読んで、またはGoogleで検索して、それでも分からない場合に人に聞きましょう。
chomp()の仕様を答えるのは簡単だけど、そうやって何もかも人に聞くつもりならプログラミングなんて手を出さないほうがいい。
>>698
Perlのchop()も同じ仕様だよ。
というか、なぜそこでPHPが、しかも(関係あるとはいえ)別の関数が出てくるのやら。
0700687
03/06/21 18:11ID:wNdBDwZ1ttp://homepage1.nifty.com/smastani/hp/smastani/pc/thumbn.html
コチラに掲載されているようなことをやろうと思っています。
copyResized以外はGD.pmを見ることで理解が出来たのですが。。。
0701603
03/06/21 18:12ID:???0705698
03/06/21 18:36ID:???元質問者がPHPスレに誤爆してたのでPHP+Perl使いと推測。
そして違いを挙げてみた。
それだけなので怒っちゃいやん。
0706nobodyさん
03/06/21 18:43ID:???WindowsにMySQLをインストールして使う場合、
DBIとDBD::MySQLか
DBIとDBD::ODBC+MySQL ODBC Driverを使いますよね。
問題はDBD::ODBCを使った場合。
$dsn = 'DBI:ODBC:test';
こんな風にデータソースを指定しますが、testっていうデータベース名を
先にODBCドライバにつくる必要がありますよね?
でも、ODBCドライバに作成するときには、それと同時に
ユーザ名やパスワードも入れるじゃないですか。
つまり、testっていうODBCデータソースには、データベース名と
ユーザ名とパスワードがすべて含まれてるってことですよね。
なのに、そのあとそのdsnを使ってDBにつなぐときは、
$dbh = DBI->connect($dsn, 'test', 'test');
という風に、またユーザ名とパスワードを指定する必要があるわけです。
ここが納得できないんですよ。だったらODBCドライバのところでは
ユーザ名やパスワードを入れたくないんですが。
今実験してみたところ、やっぱりODBCドライバのユーザ名とパスワードの欄には
何も入れなくても(または適当にいれても)、正常にDBに接続できています。
なんで?
0707_
03/06/21 18:43ID:???0708nobodyさん
03/06/21 18:44ID:???chomp();なんかで躓くのが、PHPやってるとは思えんが( ´_ゝ`)
でもまぁ、質問スレに無能なコテは要らんわな。
質問厨がイヤならスレ見なけりゃいいんだから、アフォな煽りなんかすんなっての。
で、>>702
そのミスの仕方から察するにとほほ見ただろ?(゚∀゚)
あそこだけを信じるなよ。
0710nobodyさん
03/06/21 19:08ID:???print LINE $line "\n";
とかいて、
そのCSVファイルをWIn上で開くと、
Winの改行は\r\nのはずなのに、問題なくみれてしまうのはなんでなんでしょうか?
0711直リン
03/06/21 19:10ID:AstYoKnr0713nobodyさん
03/06/21 20:17ID:???flock (LOCKF, LOCK_EX);
みたいにするのって、
flock(DAT, 1);
flock(DAT, 2);
flock(DAT, 4);
flock(DAT, 8)
とただやるのに、比べて、どんな利点があるんでしょうか?;
0715nobodyさん
03/06/21 21:03ID:???ぜーんぶつながっちゃって困った和さ。
0716nobodyさん
03/06/21 21:04ID:???とかKcatchとか、
エラーをブラウザに出力してくれるものって、
初心者にはどれがおすすめですか?
あと、これって使っても、エラーをとらえきれなくて、
結局生エラーログにしかのってない、っってことも、ありますか?
(どーもいろいろためしてみたら、そのように思えるのですが)
0717nobodyさん
03/06/21 21:28ID:aWFirrKrhttp://mypage.odn.ne.jp/home/dongrico
0719nobodyさん
03/06/21 22:11ID:???サーバー自体のエラーは捕捉出来ない。
(CGI(perl)が返すヘッダーのエラーとか)
perl自体のエラーは詳しく知らんがたぶん100%捕捉できるだろう。
0722nobodyさん
03/06/22 00:04ID:???for ($i=m;$i<=n;$i++){
push (@tmp_ORG,$ORG[$i-1]);
}
@ORG = @tmp_ORG;
てなもんでしょうか?
いや、便利な関数とかあるのかなと思ったもので
0724nobodyさん
03/06/22 00:54ID:RPCqHkE2はヘボイという事でしょうか?
0725nobodyさん
03/06/22 01:11ID:???ヴァカ抜かすな。
KCatchが補足できないエラーはきちんとKCatchのページに書いてある。読め。
あ、もう一つ補足できないエラーがあるな。
お前のねじれた脳味噌から生じた論理エラーだ。
0726nobodyさん
03/06/22 01:37ID:???漏れのHPのKENTWEBのチャットを設置してうまく動作したのを確認して
次はスタイルシート埋め込み。
DLしたら分かるけどwtalk2.cgiの200行目付近にHTMLに出力する記述があるからそこに次の一行を追加。
print OUT "<Link Rel=\"stylesheet\" Type=\"text/css\" Href=\"../../lib/memory.css\"><Blockquote><Blockquote><Blockquote><Blockquote>\n"
もちろん適当に入れたのでなくてそれらしくHEADタグの中に普通に埋め込み。こっちでは203行目ってことになるな。
で、文法チェッカーでみると、いじった筈のない205行目の
print OUT "参加者($num):$member<hr>\n<!--START-->\n";
でエラー。OUTを宣言する必要がありますか?とか言いおる。
かなり分かりにくいと思うので整理。
1.自分はKENTWEBで配布されている「WebTalk」というチャットスクリプトにスタイルシートを埋め込みたい。
2.<Link Rel="〜のタグを埋め込む為、wtalk2.cgiの203行目に↑のスクリプトを追加。
3.なぜかエラー。500InternalServerErrorらしい。んで早速文法チェッカー走らせてチェックさせたらいじった筈のない直後の205行目で文法エラー。OUTを宣言する必要がないとかなんとか。
だれか助けて><。
0728nobodyさん
03/06/22 01:53ID:???ODBCのドライバの設定は必須ではない。必要なパラメータは全部connectストリングに埋め込む事もできる。
>>726
情けなくなるくらいヘボだな。追加した文の文末に「;」が無い。
この位の事でとうとうと泣き言並べ立てて恥ずかしくないか?
0729728
03/06/22 01:55ID:???0730nobodyさん
03/06/22 02:08ID:7kmjTzsL(゚Д゚)ポカーン
ネタ・・・だよな?いくらなんでもここまで初心者はないよ・・・な?な?
0731nobodyさん
03/06/22 02:21ID:???それ以前に、エラーすら書かない奴がとにかく多い。
なんとか聞き出してみれば、500エラーとか抜かすし。
エラー書けっつーのはちゃんと>>1にも書いてあるんだがなあ。
0732nobodyさん
03/06/22 04:03ID:UMFBhruU2:gzipを使ってみました。
3:どこかのサイトにもあったのですが、既に圧縮されている
画像などに関しては圧縮されないみたいでした。
100kbに対して100b程度減りはしました。
画像の転送量を減らす手段は他にありませんでしょうか?
0734nobodyさん
03/06/22 06:17ID:???CGIで作成したファイルですが、パーミッションを変更(666や777)してもFTPから削除できません…。
スーパーユーザーではないので、所有者の変更をする事も出来ません。
rootで無い限り、どうする事も出来ないんでしょうか?
#CGIから削除するしかない?。それともサーバーによるものでしょうか?
#ちなみに、ディレクトリの場合は削除する事ができました。
0735nobodyさん
03/06/22 08:36ID:???chown ore:ore hoge.cgi
して、自分のファイルにしちゃう。
0736nobodyさん
03/06/22 10:55ID:???みたいに、ハッシュ配列を関数に渡したとき、
その引数を関数内で得るにはどうすればいいのでしょうか?
普段ならmy ($foo, $bar, hoge) = @_; とするところの話しです。
0737nobodyさん
03/06/22 11:01ID:???>>735 他人のファイルの所有者変更できるのは特権が要るだろうが。ボケッ
0738nobodyさん
03/06/22 11:30ID:???sub query_condition(%)
{
my $h = shift;
$h->{key};
}
query_condition(%house);
0740nobodyさん
03/06/22 11:54ID:???sub query_condition{
my ($lineid, $staname) = @_;
とやったら、
Can't use global @_ in "my" at search.cgi line 370.
と言われたのですが、
このエラーメッセージの意図がわかりません。
なんでこんなこといわれなきゃいけないんでしょうか?
0745nobodyさん
03/06/22 12:30ID:???0747nobodyさん
03/06/22 13:33ID:???有難うございます。
ディレクトリのパーミッションが775だったのが原因みたいです。
そのディレクトリも、CGIによって作成したものなんですが、
一生懸命0777を与えてるんですが、どうしても777になってくれません(;ω;)#775になってしまう。
ちなみに、その上のディレクトリはFTPから作成したもので、書き込みもOKです。
サーバーの設定で、ディレクトリ作成時に一般の書き込み許可させないって事とかあるのでしょうか…
兎に角、もうちょい頑張ってみます。
0748nobodyさん
03/06/22 13:39ID:???出来るものもある。System-IIIとか。
>>747
CGIでパーミッション変えればいい。
つーかユーザ権限でCGI実行できないヘボイところはとっとと見限ったほうが良い。
0750nobodyさん
03/06/22 15:47ID:wDjVUYGM$STA[$i]->{staname}
($iには0から10くらい入ってる)
には文字列があてはめられてるのに、
for ($j=0;$j<=$#STA;$j++){
push (@TMPSTALIST,$STA[$j]);
}
foreach (@TMPSTALIST){
$HTMLStaLine .= $TMPSTALIST[$_]->{staid}."/" .$TMPSTALIST[$_]->{staname}|;
}
で、何も表示してくれないんですが、なぜなんでしょうか?
0751750
03/06/22 15:47ID:wDjVUYGM$HTMLStaLineをprintしてます。
0752732
03/06/22 16:18ID:qinZbGMm2:gzipを使ってみました。
3:どこかのサイトにもあったのですが、既に圧縮されている
画像などに関しては圧縮されないみたいでした。
100kbに対して100b程度減りはしました。
画像の転送量を減らす手段は他にありませんでしょうか?
0753nobodyさん
03/06/22 16:23ID:???Perlのコーディングによる問題ではない。
よってスレ違い。
0756アラー氏 ◆.GAf6ZDA2c
03/06/22 17:16ID:???http://homepage3.nifty.com/arashi/index.html
0758nobodyさん
03/06/22 19:47ID:???メモリもクリアされるんでしょうか?
0759nobodyさん
03/06/22 20:05ID:???どこからも参照されなくなった時点でクリアされる。
逆に言えば、何かから参照されている限り、スコープを外れてもメモリの内容は残る。
たとえば、以下のようにサブルーチン内でmyした変数のリファレンスを返すということもできる。
$var = hoge();
print $$var; # うんこ
sub hoge {
my $abc = 'うんこ';
return \$abc;
}
0760nobodyさん
03/06/22 20:29ID:S8oOZHOQ複数の検索エンジンに、キーワードを投げて
その結果をまとめてから出力というものを書いています。
それで、UNIX上のApacheでcgiを走らせているので
`wget $URL`;
$html = `w3m -dump_source $URL`;
そして、ファイルに$htmlを保存
などを試してみましたが、
wgetの方はURLが長すぎてダウンロード自体に失敗して、
w3mの方は、端末で同じコマンドを打つ分には成功しますが、
実行しても、何もファイルに書き込まれていなくて上手く取得ができません。
どうか、ご教授お願いします。
0763750
03/06/22 20:50ID:Rv0SCDPi0764nobodyさん
03/06/22 20:51ID:???申し訳御座いませんでした。
0765nobodyさん
03/06/22 21:09ID:???foreach (@TMPSTALIST){
$HTMLStaLine .= $_->{lineid} . "/" . $_->{staname};
}
どういう結果が欲しいのかわからんのでこれだけ。
0766750
03/06/22 21:35ID:a19vkXUc#SELECT始まり!
$HTMLStaLine .= qq|<select name="staid" size="10" multiple>\n|;
for ($i=0;$i<=$#GlobalLineidList;$i++){
#沿線名表示!
$HTMLStaLine .= qq|<option value="">----- $LINE[$GlobalLineidList[$i]]->{linename} -----</option>|;
undef @TMPSTALIST;
for ($j=0;$j<=$#STA;$j++){
if ($STA[$j]->{lineid} == $GlobalLineidList[$i]){
push (@TMPSTALIST,$STA[$j]);
}
}
#seqでソート
@TMPSTALIST = sort { (${TMPSTALIST[$a]->{seq}} <=> ${TMPSTALIST[$b]->{seq}}) } 0 .. $#TMPSTALIST;
#沿線に属する駅名一覧を表示!
foreach (@TMPSTALIST){
$HTMLStaLine .= qq|<option value="|.$TMPSTALIST[$_]->{staid}.qq|">|.$TMPSTALIST[$_]->{staname}.qq|</option>\n|;
}
}
#SELECT終わり!
$HTMLStaLine .=qq|</select>\n|;
0768nobodyさん
03/06/22 21:59ID:???丁寧な説明有難うございます。
調子にのてもう一つお聞きしたいのですが、
リファレンスを受け取った側で、undefすると
呼び出し元もクリアされるのでしょうか?^^;
$var = hoge();
print $$var; # うんこ
undef($var); <- hogeの$abcは要らないのでクリアしたい
その後の処理…
sub hoge {
my $abc = 'うんこ';
return \$abc;
}
sub { return \%dekai_data; }
大きな値とか返した場合、クリアする必要はあるでしょうか
0769750
03/06/22 23:46ID:MaT7PvCU用は、
$STA[$i]->{lineid}
$STA[$i]->{staname}
($iには0から10くらい入ってる)なのに、
push (@TMPSTALIST,$STA[$j]);
すると、
$STA[$i]->{lineid}
は値が入ってるのに、
$TMPSTALIST[$i]->{lineid}
には値が入ってないのです。
pushした直後でも。。。
0770-
03/06/22 23:48ID:pFJThKfu「クーポン屋の仕事は簡単!」
「HPにバナーを貼ればOK!」
「年商3000万円も夢じゃない!」
「あなたの努力次第です。」
http://www.c-gmf.com/index1.htm
0771750
03/06/22 23:53ID:???@TMP = sort { (${TMPSTALIST[$a]->{seq}} <=> ${TMPSTALIST[$b]->{seq}}) } 0 .. $#TMPSTALIST;
とやるところを、
@TMPSTALIST; = sort { (${TMPSTALIST[$a]->{seq}} <=> ${TMPSTALIST[$b]->{seq}}) } 0 .. $#TMPSTALIST;
とやっていたのが原因でした。
$TMPSTALIST[$i]->{lineid}には値がちゃんと入っていたようです。
■ このスレッドは過去ログ倉庫に格納されています