Perlコーディング初心者質問スレ Part 38
■ このスレッドは過去ログ倉庫に格納されています
0001nobodyさん
04/10/07 23:23:08ID:kiEzDCJF【投稿する際の注意】
質問するときは内容をよく吟味してから投稿してください。
「コマンドの意味がわかんない」とかはマニュアル見ましょう。
回答者さんは何でも屋じゃありません。
1: 自分はこういう事がしたい。
2: それでこんな風にやってみたが・・・
3: こんなエラーが出て上手く行かなかった。
最低でも1と3が無いと誰も答えられないよ。
ソース貼る時は、全角スペースでインデント忘れずに。
良い回答は良い質問から。一緒に勉強しましょう。
過去ログやお勧めサイトは >>2-10
0304nobodyさん
04/10/22 19:31:59ID:kB/Ig1ML0305nobodyさん
04/10/22 19:32:44ID:PwMLf+Ap$data=new CGI;
$name=$data->param('name');
$mail=$mail->param('mail');
$message=$message->param('message');
こうやって取り出したデータの中の文字は、
URLエンコードされたままではなく元に戻されているのでしょうか?
0307305
04/10/22 19:50:08ID:PwMLf+Apプリントしてみたら元に戻っていたので、あれ?と思ったんです。
今までずっと$name=~s/%([a-fA-F0-9][a-fA-F0-9])/pack("C",hex($1))/eg;
やってたんですけど。
実は要らなかったのかなと思いまして。
実際どうなんでしょう?
ついでに、文字コードなんかはどうなっているのでしょうか?
0308nobodyさん
04/10/22 19:58:14ID:???0311nobodyさん
04/10/22 20:05:07ID:???漏れは敢えて「やってみなきゃわからんのは頭悪過ぎ。まず man を読め」と言うことにする
0313nobodyさん
04/10/22 20:56:34ID:???0315303
04/10/22 21:00:19ID:???だれかヘルプみー
0318nobodyさん
04/10/23 15:43:12ID:EsL8XLQNperlには、Cにおけるfprintfのような関数はないのでしょうか?
print FILE hogehoge;
というのが何行も続いてしまい、違和感を感じるのですが。
0319nobodyさん
04/10/23 16:40:33ID:???Perlは元々レポート作成用言語ディスよ?
fprintfに限らず、テキストの、文字入出力、ファイル入出力においての利便性は
Cとは比較にならんて。
ヒアドキュメントでも、format でも sprintf でも好きなもので対処すれば?
0320nobodyさん
04/10/23 16:41:54ID:???の「||」の意味が分かりません。
だれか教えてくださいませ
0321nobodyさん
04/10/23 16:43:05ID:???or と ほぼ同じ。 or よりも優先順位が高いので or と書いておいたほうが
意図どおり動くことが多いはずだよ。
0325nobodyさん
04/10/23 17:42:48ID:???sprintfで解決しました。
printする文字列を関数呼び出しで作成するというのは考えが及びませんでした。
どうもありがとうございました。
0326nobodyさん
04/10/23 19:41:00ID:???perlで利用することは不可能でしょうか?
権限ないディレクトリにはディレクトリ作成できなかったので、
sudoで特定のユーザにmkdirの権限与えたのはいいものの、
perlで使おうとしても使えないんですね。
telnet経由しかむりぽなのでしょうか?
0327nobodyさん
04/10/23 19:55:17ID:???コーディング 【coding】
プログラミング言語を使ってソフトウェアの設計図にあたるソースコードを作成すること。
(e-Wordsより)
自分の質問がPerlに関することなのか、
それともPerlではなくCGIやHTMLについてなのかを切り分けした上で、
質問して下さい。
0328nobodyさん
04/10/23 19:55:48ID:???いや、普通にできると思うけど。具体的にどうやってるか示されてない
のでこれ以上はなんともいえんがな。
でもmkdirのような引数しだいでどこにでもディレクトリ作れるコマンドを
sudoで許可するのはあまり感心しないな。
0329326
04/10/23 20:20:45ID:???としています。
aユーザからbユーザのディレクトリに newというディレクトリ
を作成するようにしていますが、
上記ではうまくいきません。
bユーザディレクトリの権限をaユーザのものにし、
my $makedir = `mkdir $user_dir/new`;
とした場合は問題なく作成されます。
宜しくお願いします
0330nobodyさん
04/10/23 22:28:08ID:???0331nobodyさん
04/10/23 23:18:04ID:???次の質問よろ
0332nobodyさん
04/10/24 10:16:22ID:???何か意味があるんですか?
0333nobodyさん
04/10/24 10:38:56ID:???perlコーディングには関係ないと思うんですが...
サザエさんの、来週もまた見てくださいねぇ〜、hogehugu が起源です。
0334nobodyさん
04/10/24 12:22:59ID:???0336nobodyさん
04/10/24 19:38:54ID:5pufjC0Pこちらを参考に、アップロードのCGIを作成しているのですが、
アップロードを行うと、同フォルダにゴミファイルのようなものが出来てしまいます。
これを、消す事は出来ないのでしょうか?
0337nobodyさん
04/10/24 19:40:35ID:???0338nobodyさん
04/10/24 20:14:53ID:5pufjC0P0340nobodyさん
04/10/24 20:38:56ID:5pufjC0Pはい、そうです。
0342nobodyさん
04/10/24 20:47:25ID:5pufjC0Pclose($filename);
close(OUT);
としたら、作成されないようになりました!(これで、大丈夫ですよね)
大変ありがとうございました。
0343336
04/10/24 21:57:58ID:B/djfAD8アップロードしたファイルの名前を変更したいのですが、
print(OUT $file);
rename("$filename", "123456.xls");
close($filename);
close(OUT);
と、したのですが、これでは駄目なのでしょうか?
試してみたところ、上手くいきませんでした。
0344nobodyさん
04/10/24 22:08:01ID:???0346336
04/10/24 23:10:44ID:B/djfAD8renameの位置を変えて、色々といじったら、うまくいきました。
>>345
アドバイス、ありがとうございます!
度々申し訳ありません、もうひとつ質問させてください。
このコードでは、HTML部分でWinとMacを最初に入力するようにしていますが、
Winを使用しているのにMacを選択してしまった・・・と言う場合に、
何か不都合が発生するのでしょうか?
自分で試したところ、どちらでも特に問題なくアップできましたので・・・
できれば、この入力部分は省きたいと思っておりますので、
必要無い、との事でしたら削除しようと思っております。
0347nobodyさん
04/10/24 23:33:53ID:???0348nobodyさん
04/10/25 11:29:41ID:???それwindowsの話かな? unix系だとopen直後にunlinkしてプロセス終了時に
一緒になくなる一時ファイル作るってわりとありがちな手なんだけどね。
0349nobodyさん
04/10/27 07:17:45ID:???Jcode.pm をスクリプトに同梱して配布したとしても
サーバ側でインストールがされていないと使えないものなんでしょうか?
この辺の仕組みがよくわかりません……。
0350nobodyさん
04/10/27 07:53:40ID:???とりあえずインストールしてなくても動かすことはできるみたいですね。
スレ汚しすみません。
0351nobodyさん
04/10/27 09:59:20ID:???とあるドメインから、別のドメインのディレクトリ一覧、及びファイルの読み込みを行いたいのですが、
下記のようにするとオープンエラーになります。
(改行が多いと言われたので、次に書きます)
別ドメインのディレクトリ内容やファイルの取得は出来ないのでしょうか?
もし可能でしたら方法を知りたいのですが、お教えいただけませんでしょうか?
0352nobodyさん
04/10/27 09:59:56ID:???# ディレクトリの一覧を取得
if( !opendir(DIR,"CGIを設置しているところとは別のドメインのディレクトリ") ){
print"OpenErr";
}else{
foreach $file( readdir(DIR) ){
print "$file<BR>\n";
}
closedir(DIR) ;
}
--------------------------------------------
# ファイルの中身を取得
if (!open(IN,"CGIを設置しているところとは別のドメインのファイル") ){
print"OpenErr";
}else{
@data = <IN> ;
foreach $file(@data){
print "$file<BR>\n";
}
close(IN) ;
}
--------------------------------------------
0353nobodyさん
04/10/27 11:42:36ID:???openで失敗してるんだろ、$!参照(print"OpenErr:$! at ",__LINE__; )
たぶん、権限ナシと予想するが
つーか、別のドメインってリモートじゃないよな
0354nobodyさん
04/10/27 12:15:49ID:???えーと、見当違いなレスだったらすみません。
使用したいドメイン名は書けませんが、要は
○○○.com にあるファイルを ×××.net で読み取る…と言う事をしたいのです。
リモートではないです。
権限の方、確認してみます。
0355351
04/10/27 12:32:51ID:???>353さん
もちろんオープンで失敗していますので、エラーのメッセージとなります。
なので、オープン成功するにはどうしたら良いのかなーと。
そもそも無理なのでしたら仕方ないのですが、BLOG等では他の日記データとかを取り込んで
表示する仕組みとか有るみたいなので、どうにか方法はあると思うのですが…
もしPerl側の工夫で出来るなら、どうすればよいかヒントを頂けると助かります。
権限(ファイル置いているサーバ側の設定?)とかの変更が必要でしたら、
管理者に作業してもらおうと思います。
0356nobodyさん
04/10/27 13:13:09ID:???バーチャルホストか?
どうもそうじゃないように見えるんだけどな・・・
VHでやってるなら権限次第だな
そうじゃないなら質問内容をもうちょっと的確に書けるくらい勉強しよう
あと最低限>>1は必ず目を通そうな
0357351
04/10/27 13:37:48ID:???>>356さん
お手間おかけしましてすみませんでした…
もう少し勉強してきて、それでいて判らなければまたよろしくお願いします。
どうも有難う御座いました。
ちなみにバーチャルホストではなく完全に別ドメインのサーバで、
例えて言うと、”google.co.jp内の特定のファイル”を読むCGIを、
yahoo.co.jp内に設置したいのでした。
(読み込みたいファイルの名称やURLは固定のものです)
0359nobodyさん
04/10/27 17:10:04ID:???うざい
質問するレベル以前
つーか、open失敗する理由が、$!にセットされるから、先ずそれを表示させてみろ
まさか、open(IN,"http://www.yahoo.com/hoge")とかやってないだろうな?
0360nobodyさん
04/10/27 18:11:49ID:???0361nobodyさん
04/10/27 20:31:12ID:???0363nobodyさん
04/10/27 21:59:06ID:???use base 'EXPORTER';
use LWP::Simple;
our @EXPORT = ('open');
sub open{
}
ここまで書いた後は頼んだ>>364
use subs qw(open);
*open= sub { get($_[0]); };
$url="http://www.hogehoge/";
$data= open($url);
0365nobodyさん
04/10/28 01:47:21ID:GkfPSbvyハッシュのリストを作ってはみたものの
どうやってサブルーチンから出せばいいのかわからなくなりました。
sub XXX{
…
push @{ HoA{key_name} }, "value1", "value2";
…
return (??????);
}
このような場合ってどうやってリターンすれば宜しいでしょうか??
0366nobodyさん
04/10/28 02:07:20ID:GkfPSbvy0368nobodyさん
04/10/28 08:42:07ID:???こう?
return \%Hoa;
で、
$refHoA->{key_name}->[0]
0369nobodyさん
04/10/28 09:10:58ID:???my %HoA;
&XXX(\%HoA);
print @{$HoA{'key_name'}};
exit;
sub XXX {
my $refHoA = $_[0];
push @{$$refHoA{'key_name'}}, "value1", "value2";
return(0);
}
0370nobodyさん
04/10/28 09:56:08ID:???そんなことしない
サブルーチンで局所化した変数でもリファレンスを返すと、スコープ外でも変数の内容は維持される。
なんか変な気もするが、そういうものらしい
なんでかはしらない(局所化してもスコープ外で実際に破棄されるわけではない?)
つーか、perlモジュールのコンストラクタは普通に局所化したハッシュをblessしてるし
0371nobodyさん
04/10/28 09:56:09ID:???sub XXX {
my $HoA;
push @{$HoA->{key_name}}, "value1", "value2";
return $HoA;
}
0372nobodyさん
04/10/28 14:04:58ID:???my宣言した変数は内部に被参照カウンタを持っていて、
それが0にならない限りデータ領域は解放されないです。
サブからリファを返した場合、そのリファを保持する限り
領域も保持され、破棄すると領域も解放されるです。
0373365
04/10/28 14:35:37ID:???どれも有効でしたが、368氏の方法が一番マッチしました。
ありがとうございました。
0374nobodyさん
04/10/29 18:08:56ID:jolcQ+aO今ローカル環境がないのであまり無茶なテストをサーバでしたくないために質問しました。すみません。
アンダースコアは大丈夫なことは知っています。
ハイフンもハッシュのキーになら使えるということも知っています。(クォート必要ですが)
変数名にも使えるのでしょうか?
例)
$a-a = 1;
$aa- = 1;
$-aa = 1;
確か一番下はダメなはず。
宜しくお願いします。
0376374
04/10/29 18:25:42ID:jolcQ+aO>ぐぐった
>出てきた
だから?ぐぐるのもここで質問するのも同じだろ。
まぁ、ぐぐったら出てくるという回答だとしたら・・・
ありがとうございました。ハイフンは使えないようで。それでは失礼します。
0377nobodyさん
04/10/29 18:28:19ID:oV9k/ZOoうわすげームカツクこいつ
マジで死ね 首吊って今すぐ死ねや 糞が
0378374
04/10/29 18:39:04ID:jolcQ+aOたかが2ちゃんでの出来事にいちいち本気になるなよ
0380nobodyさん
04/10/29 18:46:02ID:oV9k/ZOoハァ?それが関係あんのか?
更に胸糞悪ぃなてめぇは
0381374
04/10/29 18:47:36ID:jolcQ+aOそもそも2ちゃんで本気になるお前らがおかしいだろ
ムキになるなよ
0384nobodyさん
04/10/29 18:52:42ID:???ttp://perldoc.com/perl5.8.4/pod/perlstyle.html
最後の項目を声に出して読みましょう。
>>376
> ぐぐるのもここで質問するのも同じだろ。
false
0385374
04/10/29 18:54:15ID:jolcQ+aOお前が死んだらいいんじゃないか?
自分のために人が何かしてくれるとでも思ってるの?
いい加減自立しろよ、な。
嫌いなやつは「氏ね」なんて理屈は小学生レベルだぞ。
もうすこし大人になったほうがいいんじゃないか、な。
0387nobodyさん
04/10/29 18:56:36ID:???0388nobodyさん
04/10/29 19:05:53ID:???の最後の文字列を消すようにはどのようにすればいいでしょうか?
この場合は、$abc=123にしたいです。
0389nobodyさん
04/10/29 19:37:50ID:???0390nobodyさん
04/10/29 20:26:27ID:???0391nobodyさん
04/10/29 20:45:30ID:???登録や削除のできるCGIを作っています。
一つのフォームから、いくつかのsubmitを使って、それぞれ処理を変えたいのですが、
どのようにすればよいでしょうか?
なんとなく、nameを使ったり、受ける側でif文を書けばいいのかな?という感じなのですが、
どうやって、if文でsubmitのnameを受けたり、分岐したりすれば良いのか分からない状態
です。
どうぞ、よろしくお願いします。
0394nobodyさん
04/10/29 20:59:11ID:???すいません、その書き方が分からないので・・・
if文になるんでしょうか?
突然言い渡された仕事で、何が何だかさっぱりな状況なのでお願いします・・・。
連投になってしまい、すいません
0395nobodyさん
04/10/29 21:25:48ID:???<INPUT name=text1>
<INPUT name=text2>
<INPUT name=text3>
<INPUT name=text4>
<INPUT type=submit value="ここ押せ" name=hoge>
-----------------
-------cgi--------
#!/usr/bin/perl
require 'cgi-lib.pl';
require 'jcode.pl';
&ReadParse(*in);
$txt1 = "$in{'text1'}";
$txt2 = "$in{'text2'}";
$txt3 = "$in{'text3'}";
$txt4 = "$in{'text4'}";
&jcode'convert(*txt1,'sjis');
&jcode'convert(*txt2,'sjis');
&jcode'convert(*txt4,'sjis');
処理
---------
こんなもんだろ。
0397nobodyさん
04/10/29 22:00:17ID:???なんかどこをみても載ってない気がする。
0399nobodyさん
04/10/29 22:58:21ID:buGH5/R10400nobodyさん
04/10/29 23:26:28ID:???まあ裸では使えないが${'...'}のかたちにすりゃほとんど
なんでもアリ。
そうまでして使いたいものかどうかはギモンだがな。
${'a-a'} = 1;
${'aa-'} = 1;
${'-aa'} = 1;
0402nobodyさん
04/10/30 00:47:08ID:???こんなことはできますか?
0403nobodyさん
04/10/30 00:48:20ID:???■ このスレッドは過去ログ倉庫に格納されています