【Perl】初心者コーナー Part13
■ このスレッドは過去ログ倉庫に格納されています
0001nobodyさん
02/05/30 13:06ID:R2kt1mTx1:自分はこう言う事がしたい。
2:それでこんな風にやってみたが・・・
3:それだとこんなエラーが出て上手く行かなかった。
1と3が無いと誰も答えられないよ。
良い回答は良い質問から。一緒に勉強しましょう。
CGIの質問は【CGIだけど、なんか質問ある? part 6】
http://pc.2ch.net/test/read.cgi/php/1019561283/
参考書籍の話題は【【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あたりを見よう。
0263261
02/06/15 01:39ID:4GLBjH4Ittp://www.ba.wakwak.com/~chikura/050mypaso14gazoukeijiban.html
を参考にして、
(url)http://cgi.tripod.co.jp/ユーザー名/cgi-bin/imgboard.cgi
cgi-binフォルダの中は
imgboard.cgi,file.dat,fileback.dat,icon.dat,jcode_sj.pl,imgsize.pl,index.html
の7つのファイルが入ってて、
cgi-binフォルダと同階層にpublic_htmlフォルダを置いて、
その中に画像保存用ディレクトリimg-boxを置いてます。
0264nobodyさん
02/06/15 01:52ID:???なるほど、、、。
まず、cgi-bin 以下には CGI および データファイルを置くようにしてみてください。
それ以外は、public_html にすべていれるという形態になるのが普通です。
0265261
02/06/15 01:58ID:4GLBjH4Icgi-binフォルダの中にはimgboard.cgi,file.dat,fileback.dat,icon.dat、
public_htmlフォルダの中にはjcode_sj.pl,imgsize.pl,index.htmlおよび画像保存用ディレクトリimg-boxフォルダを
置くというかたちになるんですか?
0266264
02/06/15 02:02ID:???ディレクトリインデックスの隠し用だったようなので すべて cgi-bin
の中で問題ないようです。
0267261
02/06/15 02:11ID:4GLBjH4I>>264
「なお、画像は、セキュリティー上の理由から、cgi-bin以下におくと表示されませんので、
必ずTripod内のcgi-bin以外におくようにしてください。」
ということで、画像保存用ディレクトリimg-boxをcgiと同じ場所に置かず、
投稿画像の格納ディレクトリ($img_dir = './img-box'; # デフォルト位置)を変更しなきゃならないようなんで、
($img_dir = '/public_html/img-box'; # デフォルト位置)に変更したんですがうまくいきません。
cgiは機能してるんですが、画像がアップロードできません。
img-boxフォルダの中をのぞいても何も入ってませんでした。
0268264
02/06/15 02:20ID:???6300 ステップもあったのでゲンナリしました。
まず、画像の表示は単純に imgタグに直接画像パスを書く方法を採っている
ので HTML と CGI の置き場所が別になっているタイプのサーバではこのまま
では動きません。
0269261
02/06/15 02:25ID:4GLBjH4ITripodはcgiを使う場合のURLが
http://cgi.tripod.co.jp/ユーザー名/cgi-bin/imgboard.cgi
普通のhtmlは
http://members.tripod.co.jp/ユーザー名/
だからHTMLとCGIの置き場所が別になっている訳ですね。
別のサーバー探すしかないか…。
0270264
02/06/15 02:26ID:???$img_dir = '/ユーザ名/public_html/img-box';
0271261
02/06/15 02:43ID:4GLBjH4Iだめでした(爆)。サーバー側の問題?
配布されたcgiに「場所の指定方法は通常は相対パスで指定して下さい」とあったので、
ユーザー名は必要ないのかな?
0272261
02/06/15 02:45ID:4GLBjH4I絶対パスで正解でした。スマソ。
<以下配布されたcgiより>
あなたのプロバイダが、cgiとデータファイルを同じ場所に置くことが出来ない
特殊なプロバイダ(hi-ho等)で、cgiと同じディレクトリやcgi直下に保存
用ディレクトリを作れない場合、絶対パスによる指定が必要となる場合があります。
この場合、5行ほど前にある$img_dirを絶対パス*指定に書換えて下さい。
0273nobodyさん
02/06/15 02:48ID:mydlqxE+それともディレクトリにアップロードするだけでいいの?
0274264
02/06/15 02:55ID:???おそらく imgタグで .. がNGになる可能性あり。
$img_dir = '../public_html/img-box';
または
ソース内で img-box の存在チェックをしているのでWWWサーバのマウントポイント
からの相対パスを使えないのでダメもとでサーバのディレクトリ構造を推測して以下
のように書けばOKかも。
$img_dir = '/home/ユーザ名/public_html/img-box';
0275264
02/06/15 03:02ID:???モジュールって使ったことないけど以下を書いてもダメ?
BEGIN{ unshift(@INC, '.'); };
0276261
02/06/15 03:07ID:4GLBjH4Iダメでした…。
HTMLとCGIの置き場所が同じサーバー探します。
夜遅くまでご親切に、こんな初心者にお付き合いいただきありがとうございました。
すごく勉強になりました。
0277nobodyさん
02/06/15 03:34ID:???*.pmだけで完結してるモジュールは、275の方法でいけるんすけどね。
GD.pmの場合はバイナリコードを作らなきゃあかんかったり、
サーバにないかもしれないライブラリ(libjpeg.soとかlibpng.soとか)を
いろいろ必要とするから、モジュールだけアップロードしても99%駄目。
0278レス
02/06/15 07:31ID:/CDsyhKPうんありがとう。
そうですね、splitを多発すると変更がめんどくさいので出来るだけ少なく作ります。
ログの変更を簡単に出来るように考えてつくろう。
また、質問することがあるかもしれません、その時はよろしくおねがいします。
0279nobodyさん
02/06/16 08:10ID:z5KHLw2yにちゃんねるみたいに「Shift_jis使ってちょ」ってやりたいんです
で、何も考えずにjcode.plのgetcodeを使ったら、
「(´・ω・`)ショボーン」をeucと認識してしまいました・・・(´・ω・`)ショボーン
半角カナが混じってても、きちんとShift_jisと認識してやるにはどうすればいいでしょうか?
Shift_jisかどうかが分かればいいです。
EUCで書かれた「汐涙維」をShift_jisと誤認識してもいいです。
# '汐涙維'(EUC) eq 'ショボーン'(SJIS)
よろしくおながいします
0280nobodyさん
02/06/16 08:59ID:???おれはjcode.plのgetcode関数をちょっと書き換えて
Shift_JISの文字数カウントに半角カナも含めてるよ。
$sjis += length($1) while /(($re_sjis_c)+)/go; #オリジナルのjcode.pl
↓
$sjis += length($1) while /(($re_sjis_c|$re_sjis_kana)+)/go; #修正版
EUC-JPをはねずに通す確率がめたくそ増えるけど気にしない。
あえてShift_JISを使う代償だと思ってあきらめてる。
0281nobodyさん
02/06/16 10:16ID:z5KHLw2yなるほど、これはいいですね。
助かりました。
どうもアリガトウ
0282nobodyさん
02/06/16 22:36ID:Us0jeEkdprint "Content-type:text/html\n\n";
$xx = "abc";
$yy = "def";
if ( あ eq あ ) {
print $xx
} else {
print &yy
}
このようにしても$xxは表示されないのですが、
あ と あ を比べる方法ってありますか?
0284nobodyさん
02/06/16 22:43ID:Us0jeEkd0285nobodyさん
02/06/16 22:51ID:???#!/usr/local/bin/perl
print "Content-type:text/html\n\n";
$xx = "abc";
$yy = "def";
if ( 'あ' eq 'あ' ) {
print $xx;
} else {
print $yy;
}
abc って出ましたが。
0286nobodyさん
02/06/16 23:01ID:Us0jeEkdあぁ〜文字列はシングルクォーテーションで囲ったらイイんですね??
ありがとうございます!
でも あ を a に変えると囲まなくてもいけるみたいですがなぜでしょう??
aも文字列のはず、、、、
0287nobodyさん
02/06/16 23:31ID:z5KHLw2y''か""で囲まないと文字列じゃないぞ・・・
0288nobodyさん
02/06/17 00:35ID:9jM4ZJCTこの
NO_MORE_RESULTS
って、どうしてクォーテーションがいらないのでしょう?
0289nobodyさん
02/06/17 01:01ID:rACyARGq開けない
0290hoge
02/06/17 04:03ID:aKd0pgn8print MOE, "\n";
0291nobodyさん
02/06/17 05:46ID:???ぐーぐるさんに聞いて見れば?キーワードはbarewordとperl。
ていうかおれもPerlのbarewordの扱いについてはよくわからn。
0292nobodyさん
02/06/17 08:51ID:???$foo = bar;
$baz = bar::bax;
print $foo, $bar;
だが"sub bar;"やsubsなどで前方宣言されているとこれらはサブルーチンと見なされる。
use strict 'subs'を使うとこのような裸のワードに対して致命的エラーを発生させられるよ。
0293nobodyさん
02/06/17 09:06ID:???use strict;
my %hash = ( foo => 'bar', baz => 'gad' );
print $hash{ foo }, "\n";
$hash{ baz } = 'boo';
ハッシュキーは基本的に[a-z0-9_]を使ってる限りクオートする
必要はない。また => を使うと、左側のbarewordは自動的に
文字列に変換される。
0294nobodyさん
02/06/17 10:21ID:???(ただし>>293はPerl6でもオーケーっぽい)
ラリーヲールの黙示録2を見よ。
http://dev.perl.org/perl6/apocalypse/2#bareword%20policy
#どこかに黙示録の和訳ってねーですか?あったら教えてください。おながいします。
0295nobodyさん
02/06/17 13:21ID:???0296nobodyさん
02/06/17 21:33ID:8ZfnaOKhWindows上では使えないのでしょうか?
↓
open(FILE, "+>$file");
環境はWin2000+Apache1.3.24です。
0297nobodyさん
02/06/17 21:38ID:???なにが上手くいかないの?
同じ環境できちんと動くけど。
まさか保存されてるファイルが読み出せないとかじゃないよね?
だって最初に初期化してから書き読みモードで開いているんだから。
読み書きモードじゃなくて。
開けないって言ってるから、openが失敗してるんだよね?
ファイルの作成もできないんだよね?
そうだよね?
0299296
02/06/17 21:49ID:8ZfnaOKhA
A 予想ではAが縦にならぶはずだと思うんですけど・・
A
open(IN, "+>$file");
@data = <IN>;
$data = "A\n";
unshift(@data, "$data");
print IN @data;
close(IN);
0300a
02/06/17 22:28ID:???初心者なので何をしてよいのかまったくわかりません。
教えてください。お願いします
0301nobodyさん
02/06/17 22:37ID:???0302nobodyさん
02/06/17 22:46ID:???書き読みモードと読み書きモードの違いってわかる?
書き読みモードの手順
空ファイル作成>ファイル読み書き
読み書きモードの手順
ファイル読み書き
それと、ファイルポインタの変更しないと色々問題出るぞ。
わからないなら無理に読み書きモードは使わない方がいいかも。
0303296
02/06/17 23:12ID:???>書き読みモードと読み書きモードの違いってわかる?
ありがとうございます。分かってなかったですね。。
それでいろいろやってみて
open(IN, "+<$file");
@data = <IN>;
$data = "A\n";
unshift(@data, "$data");
seek(IN, 0, 0);
print IN @data;
close(IN);
これで動くようになりました。「+<」←これ手持ちの本に載ってなかった・・(´Д`;)
0304nobodyさん
02/06/17 23:41ID:/p2D1YQW全ての環境変数を表示した際、他人に見られるとマズイ情報ってありますか?
0305お頼み申す
02/06/18 02:03ID:giO2VPVu普段は掲示板のタイトルが見られる。
でも書き込み(新規スレ立て、レス共に)はログイン/認証しないと
できないというような物はありますか?
探し続けて見あたらず無理なのかなと諦め気味。
いかがでしょうか?
0306nobodyさん
02/06/18 02:23ID:zmbvlCMyというか100%すれ違いです。
0307nobodyさん
02/06/18 03:40ID:7mI4OrKxi-mode版(http://red.tomato.nu/desperado/software/)に、
i-PADv2(http://www.kent-web.com/bbs/ipad/ipad2.cgi)みたいに
返信がいくつ返ってきてるかわかる表示を加えたいんですが・・・
0311nobodyさん
02/06/18 10:45ID:???0312nobodyさん
02/06/18 13:03ID:???Jcode.pmってActiveperlにはインストールできないんでしょうか?
0314nobodyさん
02/06/18 16:38ID:OAKwZ56o#!/usr/bin/perl -w のオプションは機能しませんよね?(実際機能してないようなので。)
0315314
02/06/18 16:44ID:???0316nobodyさん
02/06/18 18:21ID:???use strict;
my ($a, $b);
local $c;
$a = 2;
$b = 3;
$c = $a + $b;
print "Content-type: text/html; charset=EUC-JP\n\n";
print $c;
こうすると
Global symbol "$c" requires explicit package name at (eval 1) line 6.
Global symbol "$c" requires explicit package name at (eval 1) line 10.
Global symbol "$c" requires explicit package name at (eval 1) line 13.
こういうエラーが出るのですが、すべてレキシカル変数にすると動きます。
なぜローカル変数だとuse strictでエラーが出るのでしょうか?
実際のスクリプトは複雑でどうしても$cをローカル変数で使いたいのです。
どうすればグローバル変数を使わずに正常に動かすことができるでしょうか?
0317nobodyさん
02/06/18 21:52ID:???なぜエラーになるかは、perldoc strict を読むべし。
「variable suicide問題を避けるため」らしい。よくわからんけど。
どうしてもlocal変数を使わなくてはいけない場合は、
use vars ('$c', '@array', '%hash'); # perl5.0
または
our ($c, @array, %hash); # perl5.6
みたいに、最初に変数名を宣言(というかシンボルテーブルに登録)しておく。
以上、経験則のみで答えますた。詳しくは識者の登場を待て。
0318nobodyさん
02/06/18 22:39ID:???ありがとうございます。
>use vars ('$c', '@array', '%hash'); # perl5.0
>または
>our ($c, @array, %hash); # perl5.6
これでいけました。恥ずかしながら今まで知らなかったので(汗)、これを機に勉強してみます。
0319nobodyさん
02/06/19 01:44ID:nhdfxt0tmake testをすると、『Test/More.pmが見つかりません』というようなことを言
われます。More.pmは何かのファイルに同梱されてるのでしょうか?
一応以下のURLを探してみたのですが、見つかりません…。
http://www.cpan.org/modules/by-module/
どなたかMore.pmがある場所を教えて下さい。
0320nobodyさん
02/06/19 02:03ID:???0321nobodyさん
02/06/19 02:32ID:???解決しました。
Test-Moreはもう古く、入れるならTest-Simpleでやってくれと
言われて、Test-Simple-0.44.tar.gzを入れました。
うまくいきました。
ありがとうございました。
0322nobodyさん
02/06/19 19:05ID:oqQh34R0画像を表示させたいのですが上手くいきません
print "Content-type: image/gif\n\n";
open(IMG,"test.gif");
binmode(IMG);
binmode(STDOUT);
print <IMG>;
close(IMG);
KENTカウンタからそれらしい部分を
抜き出してみましたが動きません
画像はとほほカウンタのを使ってテストしてるので
変なヘッダーが入ってるということはないと思います。
http://www.angelfire.com/ak5/2ch-web-program/kako/957208980.htmlの
600も試してみましたが動きません…。
誰か助けてください…。(;´д`)
#画像表示すらできない自分が情けない(´Д⊂
0323s
02/06/19 19:28ID:???みたところおかしな部分はないようです。他の部分ってことない?
0324nobodyさん
02/06/19 19:29ID:???> print <IMG>
↑この部分を↓こう変えてみそ
while ( $cb = read( IMG, $data, 2048 ) ) {
print $data;
}
0325LWPを使ってみたいのですが
02/06/19 21:29ID:FGMnMj5WLWPをダウンロードしてきたけど、なんかひとつのpmファイルになってないようで
そのまま使えそうにありません。
使用してるのはwakwakのCGIなので使用条件が載っているページを見てみたのですが
perl5.6で標準ライブラリ?は利用できるようです。
で、標準ライブラリにあるか
試しにuse LWP::Simple;でCGIを動かしてみたのですが、内部エラーになりました。
LWPは、この環境では使うことはできないのでしょうか?
・インストールする方法(できないと思うが)
・インストールせずにデレクトリに配置して動かす方法
・他のCGI可無料HPですでにLWPがインストールされてるのでそこを使うといい
等々、なにか良い方法はないのでしょうか?
使うのは多分LWP::SimpleでHTMLドキュメントを引っ張ってくるだけです。
0326322
02/06/19 21:51ID:???ありがとうございます。
原因はわかりませんが、両方の方法を試してみて
ダメだったので元に戻したら表示されました (´∀`;)意味わかんねス
0327nobodyさん
02/06/19 22:33ID:???LWPはperlコードだけで構成されてるから、自分で入れることも可能だと思う。
ただしLWPが入ってないサーバつーのは、そもそもソケットの使用を禁止してる場合も多い。
そんときはLWPを入れても無意味。
0328LWPを使ってみたいのですが
02/06/20 00:34ID:XCYMLnG6use Socket; 自体は動作しますが、Socketで通信を許しているのは localhostへのsmtp/tcpのみとなります。
だそうです。
これって望み薄ですか?
ちなみにやり方間違ってるっていうチョンボはしてませんよね?(僕)
ただuse LWP::Simple;としているだけなのですが・・・
0329LWPを使ってみたいのですが
02/06/20 01:43ID:+cy8aoAH自作CGIのでバック設定というのができるみたいで
それを使ってやってみました。
最初は、HTTP/Statusのパスがうまく行っていなかったようなので
@INC追加したら、そこはクリアできました。
ただ
unless(defined($content = get $url)){
のところで
Can't call method "get" on an undefined value
が出てしまいました。これは無理と言うことでしょうか?
0330nobodyさん
02/06/20 07:49ID:???>Socketで通信を許しているのは localhostへのsmtp/tcp
駄目ジャン。
smtp/tcpってメール送信用のポートだし。localhostのみだし。
0331LWPを使ってみたいのですが
02/06/20 15:27ID:zhAJDQeRどっか、CGI可無料HPでできそうなところないですかね。
0332nobodyさん
02/06/20 19:54ID:???0333nobodyさん
02/06/21 03:04ID:???0334nobodyさん
02/06/21 03:40ID:ovOj5UMI0335nobodyさん
02/06/21 06:01ID:???できないYO!!
0336nobodyさん
02/06/21 06:03ID:???0339nobodyさん
02/06/21 11:37ID:Qqq2SOCGArray→アレイ とか
$→スカラー とかいうふうに。
require ってどう発音していいかわからないんですよ(汗)。
0340nobodyさん
02/06/21 11:41ID:???0341nobodyさん
02/06/21 12:10ID:???0342nobodyさん
02/06/21 12:19ID:???発音記号の読み方を勉強しましょう。
0343nobodyさん
02/06/21 13:39ID:???普通、発音記号の読み方って授業でやるもんですか?
うちんとこやらなかったんですよ。
商業科だったんで。
parentsとかも、その<p>で始まるやつ!親っていう意味だ! と、いう覚え方してるもんなあ……簡単なのは読めるんですが。
0344nobodyさん
02/06/21 13:43ID:???chdirとか。
Change Directoryの略でええんかい? とか。
まあ、いろいろと疑問があったんで、そういうの解説してるようなサイトとかないかなーって前から思ってたんですよ。
0345nobodyさん
02/06/21 13:48ID:???商業化の中学校なんてあるのか。
>344
その単語で検索をかけるとかしてみた?
ttp://www.google.com/search?as_q=chdir+change+directory&num=100&hl=ja&ie=UTF-8&oe=UTF8&btnG=Google+%E6%A4%9C%E7%B4%A2&as_epq=&as_oq=&as_eq=&lr=lang_ja&as_ft=i&as_filetype=&as_qdr=all&as_occt=any&as_dt=i&as_sitesearch=
1520件もひっかかるんだけど。
0346nobodyさん
02/06/21 13:50ID:???小学校からやり直してきまつ。
0349nobodyさん
02/06/21 16:45ID:???発音記号は英和辞典に載ってる。
読め。
>348
一番上にひっかかるサイトにかなり載ってる。
読め。
じゃなければ検索用語に他のコマンドも入れてみろ。
頭使え。
0350nobodyさん
02/06/21 17:26ID:???脳内では「しーえっちでぃあ」って言ってる・・・(w
0351nobodyさん
02/06/21 20:55ID:???口に出すときは"チェンジディレクトリ"だけど。
0352nobodyさん
02/06/21 20:59ID:YFodOum0英語圏ではちだーですね
0353nobodyさん
02/06/21 21:20ID:???0354nobodyさん
02/06/21 21:52ID:???Makefile.plっていうのは自分で書かなきゃきけないんですか?
自動で生成するツールはないでしょうか?
0357nobodyさん
02/06/22 00:31ID:???挿れようとしたらインストールが完走しない…鬱
俺はできたぜ
0361nobodyさん
02/06/22 01:15ID:???0362nobodyさん
02/06/22 01:58ID:???激しく感謝!!
よく見たらHDD残量が150MBしかなかったので、足りない悪寒でした。
(−_−)ウツダシノウ
嗚呼、10MBもあるドキュメン入れたくねぇ…
■ このスレッドは過去ログ倉庫に格納されています