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

Perlコーディング初心者質問スレ Part 38

■ このスレッドは過去ログ倉庫に格納されています
0001nobodyさん04/10/07 23:23:08ID:kiEzDCJF
Perlのコーディングで困ってる人のスレです。

【投稿する際の注意】
質問するときは内容をよく吟味してから投稿してください。
「コマンドの意味がわかんない」とかはマニュアル見ましょう。
回答者さんは何でも屋じゃありません。

1: 自分はこういう事がしたい。
2: それでこんな風にやってみたが・・・
3: こんなエラーが出て上手く行かなかった。

最低でも1と3が無いと誰も答えられないよ。
ソース貼る時は、全角スペースでインデント忘れずに。
良い回答は良い質問から。一緒に勉強しましょう。

過去ログやお勧めサイトは >>2-10
0304nobodyさん04/10/22 19:31:59ID:kB/Ig1ML
age
0305nobodyさん04/10/22 19:32:44ID:PwMLf+Ap
use CGI;
$data=new CGI;
$name=$data->param('name');
$mail=$mail->param('mail');
$message=$message->param('message');

こうやって取り出したデータの中の文字は、
URLエンコードされたままではなく元に戻されているのでしょうか?
0306nobodyさん04/10/22 19:41:09ID:???
>>305
プリントしてみりゃいいだろ
030730504/10/22 19:50:08ID:PwMLf+Ap
>>306
プリントしてみたら元に戻っていたので、あれ?と思ったんです。
今までずっと$name=~s/%([a-fA-F0-9][a-fA-F0-9])/pack("C",hex($1))/eg;
やってたんですけど。
実は要らなかったのかなと思いまして。

実際どうなんでしょう?
ついでに、文字コードなんかはどうなっているのでしょうか?
0308nobodyさん04/10/22 19:58:14ID:???
(´-`).。oO(なんで自分で確かめられないんだろう)
0309nobodyさん04/10/22 20:02:09ID:???
>>303
エスケープ文字について勉強しなおすことをすすめる
0310nobodyさん04/10/22 20:03:26ID:???
>>309
qqについて勉強しなおすことをすすめる
0311nobodyさん04/10/22 20:05:07ID:???
何にでも「自分でやってみて確かめろ」と返す人は多いが
漏れは敢えて「やってみなきゃわからんのは頭悪過ぎ。まず man を読め」と言うことにする
0312nobodyさん04/10/22 20:07:35ID:???
>>311
チラシの裏にでも書いてろ
0313nobodyさん04/10/22 20:56:34ID:???
最近のチラシは両面印刷です
0314nobodyさん04/10/22 20:57:46ID:???
>>313
プリントの裏にでも書いてろ
031530304/10/22 21:00:19ID:???
調べましたが、やぱーりわかりません。
だれかヘルプみー
0316nobodyさん04/10/22 21:01:36ID:???
>>312-313
すまん、ワロタw
0317nobodyさん04/10/22 22:03:02ID:???
>>315
全角スペースでも入ってるんじゃないのか?
0318nobodyさん04/10/23 15:43:12ID:EsL8XLQN
すいません、質問です。
perlには、Cにおけるfprintfのような関数はないのでしょうか?

print FILE hogehoge;

というのが何行も続いてしまい、違和感を感じるのですが。
0319nobodyさん04/10/23 16:40:33ID:???
>>318
Perlは元々レポート作成用言語ディスよ?

fprintfに限らず、テキストの、文字入出力、ファイル入出力においての利便性は
Cとは比較にならんて。

ヒアドキュメントでも、format でも sprintf でも好きなもので対処すれば?
0320nobodyさん04/10/23 16:41:54ID:???
if(hoge||hogehoge){

の「||」の意味が分かりません。
だれか教えてくださいませ
0321nobodyさん04/10/23 16:43:05ID:???
>>320
or と ほぼ同じ。 or よりも優先順位が高いので or と書いておいたほうが
意図どおり動くことが多いはずだよ。
0322nobodyさん04/10/23 16:43:06ID:???
>>320
演算子
0323nobodyさん04/10/23 16:53:18ID:???
>>320
()だらけでウザイ時に良く使う。
0324nobodyさん04/10/23 17:39:11ID:???
>>319
318は printf FILE ほげほげ と書けることを知らないに一票。
0325nobodyさん04/10/23 17:42:48ID:???
>>319

sprintfで解決しました。

printする文字列を関数呼び出しで作成するというのは考えが及びませんでした。
どうもありがとうございました。
0326nobodyさん04/10/23 19:41:00ID:???
mkdir使うみたいに sudo mkdir を
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:???
>>326
いや、普通にできると思うけど。具体的にどうやってるか示されてない
のでこれ以上はなんともいえんがな。

でもmkdirのような引数しだいでどこにでもディレクトリ作れるコマンドを
sudoで許可するのはあまり感心しないな。
032932604/10/23 20:20:45ID:???
perl で my $makedir = `sudo mkdir $user_dir/new`;
としています。
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:???
hogeほげって何ですか?
何か意味があるんですか?
0333nobodyさん04/10/24 10:38:56ID:???
>>332
perlコーディングには関係ないと思うんですが...
サザエさんの、来週もまた見てくださいねぇ〜、hogehugu が起源です。
0334nobodyさん04/10/24 12:22:59ID:???
サザエさんはfugafuguだろ。うそ教えるなよhage
0335nobodyさん04/10/24 13:34:27ID:???
>>332
ttp://kmaebashi.com/programmer/hoge.html
0336nobodyさん04/10/24 19:38:54ID:5pufjC0P
http://www.harukaze.net/~mishima/perl/module/upload_by_CGI_pm.html

こちらを参考に、アップロードのCGIを作成しているのですが、
アップロードを行うと、同フォルダにゴミファイルのようなものが出来てしまいます。
これを、消す事は出来ないのでしょうか?
0337nobodyさん04/10/24 19:40:35ID:???
消せばいいんじゃない?
0338nobodyさん04/10/24 20:14:53ID:5pufjC0P
すいません、消すと言うか、もとから作成されなくするって事は出来ないでしょうか?
0339nobodyさん04/10/24 20:36:57ID:???
>>338
ごみファイルってCGITemp?????とか言うやつ?
0340nobodyさん04/10/24 20:38:56ID:5pufjC0P
>>339
はい、そうです。
0341nobodyさん04/10/24 20:40:37ID:???
>>340
print(OUT $file);
close(OUT);

この間に一工夫いる。
CGITempでぐぐるといいよ。
0342nobodyさん04/10/24 20:47:25ID:5pufjC0P
print(OUT $file);
close($filename);
close(OUT);

としたら、作成されないようになりました!(これで、大丈夫ですよね)
大変ありがとうございました。
034333604/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:???
ファイルの名前変えるのはファイル閉じてから。
0345nobodyさん04/10/24 22:18:07ID:???
>>343
ハンドル持ってると操作が限定されるよ。
試しにopenしてから何秒かsleepさせて、その間に削除しようとしてみ。
034633604/10/24 23:10:44ID:B/djfAD8
>>344
renameの位置を変えて、色々といじったら、うまくいきました。

>>345
アドバイス、ありがとうございます!

度々申し訳ありません、もうひとつ質問させてください。
このコードでは、HTML部分でWinとMacを最初に入力するようにしていますが、
Winを使用しているのにMacを選択してしまった・・・と言う場合に、
何か不都合が発生するのでしょうか?
自分で試したところ、どちらでも特に問題なくアップできましたので・・・

できれば、この入力部分は省きたいと思っておりますので、
必要無い、との事でしたら削除しようと思っております。
0347nobodyさん04/10/24 23:33:53ID:???
3度続くと流石に答えてもらえなくなる。
0348nobodyさん04/10/25 11:29:41ID:???
>>345
それwindowsの話かな? unix系だとopen直後にunlinkしてプロセス終了時に
一緒になくなる一時ファイル作るってわりとありがちな手なんだけどね。
0349nobodyさん04/10/27 07:17:45ID:???
UTF-8 の判別、EUC へ変換などをしたので Jcode を利用したいのですが、
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:???
>>351
openで失敗してるんだろ、$!参照(print"OpenErr:$! at ",__LINE__; )
たぶん、権限ナシと予想するが

つーか、別のドメインってリモートじゃないよな
0354nobodyさん04/10/27 12:15:49ID:???
>353さん
えーと、見当違いなレスだったらすみません。
使用したいドメイン名は書けませんが、要は
○○○.com にあるファイルを ×××.net で読み取る…と言う事をしたいのです。
リモートではないです。

権限の方、確認してみます。
035535104/10/27 12:32:51ID:???
連続ですみませんです。

>353さん
もちろんオープンで失敗していますので、エラーのメッセージとなります。
なので、オープン成功するにはどうしたら良いのかなーと。

そもそも無理なのでしたら仕方ないのですが、BLOG等では他の日記データとかを取り込んで
表示する仕組みとか有るみたいなので、どうにか方法はあると思うのですが…

もしPerl側の工夫で出来るなら、どうすればよいかヒントを頂けると助かります。
権限(ファイル置いているサーバ側の設定?)とかの変更が必要でしたら、
管理者に作業してもらおうと思います。
0356nobodyさん04/10/27 13:13:09ID:???
>>351=354-355
バーチャルホストか?
どうもそうじゃないように見えるんだけどな・・・

VHでやってるなら権限次第だな
そうじゃないなら質問内容をもうちょっと的確に書けるくらい勉強しよう

あと最低限>>1は必ず目を通そうな
035735104/10/27 13:37:48ID:???
>>353さん
>>356さん
お手間おかけしましてすみませんでした…
もう少し勉強してきて、それでいて判らなければまたよろしくお願いします。
どうも有難う御座いました。

ちなみにバーチャルホストではなく完全に別ドメインのサーバで、
例えて言うと、”google.co.jp内の特定のファイル”を読むCGIを、
yahoo.co.jp内に設置したいのでした。
(読み込みたいファイルの名称やURLは固定のものです)
0358nobodyさん04/10/27 14:57:41ID:???
>>357
LWP::Simple(モジュール)とかプロトコルについて勉強すると幸せになれるかも
0359nobodyさん04/10/27 17:10:04ID:???
>>351
うざい
質問するレベル以前
つーか、open失敗する理由が、$!にセットされるから、先ずそれを表示させてみろ

まさか、open(IN,"http://www.yahoo.com/hoge")とかやってないだろうな?
0360nobodyさん04/10/27 18:11:49ID:???
質問文をちゃんと読めよ
0361nobodyさん04/10/27 20:31:12ID:???
(´-`).。oO(LWP を open に override してくれる神の光臨待ち。。。)
0362nobodyさん04/10/27 20:56:50ID:???
>>361
そういうライブラリはあればあったで便利かもしれんな。
0363nobodyさん04/10/27 21:59:06ID:???
package LWP::Open;

use base 'EXPORTER';
use LWP::Simple;
our @EXPORT = ('open');

sub open{

}
ここまで書いた後は頼んだ>>364
0364 ◆7CWqH7Oesg 04/10/27 22:34:08ID:???
use LWP::Simple;
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:GkfPSbvy
というか、リストのハッシュと言ったほうがよさそうだ。
0367nobodyさん04/10/28 08:40:21ID:???
>>365
先にサブルーチンへリファレンスを渡してからゴリゴリするのが常套かと。
0368nobodyさん04/10/28 08:42:07ID:???
push @{$HoA{key_name} }, "value1", "value2";

こう?

return \%Hoa;

で、

$refHoA->{key_name}->[0]
0369nobodyさん04/10/28 09:10:58ID:???
別にグローバルならrefをreturnしてもいいけど、こうじゃないの?
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:???
>>369

そんなことしない
サブルーチンで局所化した変数でもリファレンスを返すと、スコープ外でも変数の内容は維持される。
なんか変な気もするが、そういうものらしい
なんでかはしらない(局所化してもスコープ外で実際に破棄されるわけではない?)
つーか、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:???
>>370
my宣言した変数は内部に被参照カウンタを持っていて、
それが0にならない限りデータ領域は解放されないです。
サブからリファを返した場合、そのリファを保持する限り
領域も保持され、破棄すると領域も解放されるです。
037336504/10/28 14:35:37ID:???
ありがとうございました。みなさま。
どれも有効でしたが、368氏の方法が一番マッチしました。
ありがとうございました。
0374nobodyさん04/10/29 18:08:56ID:jolcQ+aO
変数名にハイフンは使っていいですか?
今ローカル環境がないのであまり無茶なテストをサーバでしたくないために質問しました。すみません。

アンダースコアは大丈夫なことは知っています。
ハイフンもハッシュのキーになら使えるということも知っています。(クォート必要ですが)

変数名にも使えるのでしょうか?
例)
$a-a = 1;
$aa- = 1;
$-aa = 1;

確か一番下はダメなはず。
宜しくお願いします。
0375nobodyさん04/10/29 18:14:21ID:???
ぐぐった
出てきた


>>374は腹を切って死ぬべきである
037637404/10/29 18:25:42ID:jolcQ+aO
>>375
>ぐぐった
>出てきた

だから?ぐぐるのもここで質問するのも同じだろ。
まぁ、ぐぐったら出てくるという回答だとしたら・・・

ありがとうございました。ハイフンは使えないようで。それでは失礼します。
0377nobodyさん04/10/29 18:28:19ID:oV9k/ZOo
>>376
うわすげームカツクこいつ

マジで死ね 首吊って今すぐ死ねや 糞が
037837404/10/29 18:39:04ID:jolcQ+aO
>>377
たかが2ちゃんでの出来事にいちいち本気になるなよ
0379nobodyさん04/10/29 18:45:37ID:???
>>374がむかつくという事実に変わりはない
0380nobodyさん04/10/29 18:46:02ID:oV9k/ZOo
>>378
ハァ?それが関係あんのか?

更に胸糞悪ぃなてめぇは
038137404/10/29 18:47:36ID:jolcQ+aO
>>379-380
そもそも2ちゃんで本気になるお前らがおかしいだろ
ムキになるなよ
0382nobodyさん04/10/29 18:50:58ID:???
>>381
いいから氏ね
0383nobodyさん04/10/29 18:51:58ID:???
態度が悪い>>374がムキになって暴れております
0384nobodyさん04/10/29 18:52:42ID:???
>>375>>377>379-380>>382
ttp://perldoc.com/perl5.8.4/pod/perlstyle.html
最後の項目を声に出して読みましょう。

>>376
> ぐぐるのもここで質問するのも同じだろ。
false
038537404/10/29 18:54:15ID:jolcQ+aO
>>382
お前が死んだらいいんじゃないか?
自分のために人が何かしてくれるとでも思ってるの?

いい加減自立しろよ、な。
嫌いなやつは「氏ね」なんて理屈は小学生レベルだぞ。
もうすこし大人になったほうがいいんじゃないか、な。
0386nobodyさん04/10/29 18:55:51ID:???
>>384
英語厨は消えろ
0387nobodyさん 04/10/29 18:56:36ID:???
この程度のもんぐらいならテストで作って動かしゃわかるってこった。
0388nobodyさん04/10/29 19:05:53ID:???
$abc=1234
の最後の文字列を消すようにはどのようにすればいいでしょうか?
この場合は、$abc=123にしたいです。
0389nobodyさん04/10/29 19:37:50ID:???
chop
0390nobodyさん04/10/29 20:26:27ID:???
$abc = int($abc/10);
0391nobodyさん04/10/29 20:45:30ID:???
すいません、初心者なんですが教えてください。
登録や削除のできるCGIを作っています。
一つのフォームから、いくつかのsubmitを使って、それぞれ処理を変えたいのですが、
どのようにすればよいでしょうか?
なんとなく、nameを使ったり、受ける側でif文を書けばいいのかな?という感じなのですが、
どうやって、if文でsubmitのnameを受けたり、分岐したりすれば良いのか分からない状態
です。
どうぞ、よろしくお願いします。
0392nobodyさん04/10/29 20:52:34ID:???
>>391
同じ name にして value を見る
0393nobodyさん04/10/29 20:57:57ID:???
>>392
0394nobodyさん04/10/29 20:59:11ID:???
>>392
すいません、その書き方が分からないので・・・
if文になるんでしょうか?
突然言い渡された仕事で、何が何だかさっぱりな状況なのでお願いします・・・。

連投になってしまい、すいません
0395nobodyさん04/10/29 21:25:48ID:???
------html-------
<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');

処理
---------
こんなもんだろ。
0396nobodyさん04/10/29 21:52:26ID:???
>>394
まずはHTMLから勉強して濃いよアフォ
>>395
アフォに何を言っても無駄だからやめとけ
0397nobodyさん04/10/29 22:00:17ID:???
すいません、perlでテキストファイルを白紙に戻す方法ってあるんでしょうか?
なんかどこをみても載ってない気がする。
0398 ◆7CWqH7Oesg 04/10/29 22:11:15ID:???
truncate
0399nobodyさん04/10/29 22:58:21ID:buGH5/R1
perlからhtmlファイルを「open」で呼び出した場合、呼び出し元はwebサーバですか?それともクライアント側ですか?
0400nobodyさん04/10/29 23:26:28ID:???
>>374
まあ裸では使えないが${'...'}のかたちにすりゃほとんど
なんでもアリ。

そうまでして使いたいものかどうかはギモンだがな。

${'a-a'} = 1;
${'aa-'} = 1;
${'-aa'} = 1;
0401nobodyさん04/10/30 00:29:39ID:???
>>397
print OUT '白紙';
0402nobodyさん04/10/30 00:47:08ID:???
print if(m/test/) while(<DATA>);

こんなことはできますか?
0403nobodyさん04/10/30 00:48:20ID:???
やってみれば?
■ このスレッドは過去ログ倉庫に格納されています