Perlコーディング初心者質問スレ Part 38
■ このスレッドは過去ログ倉庫に格納されています
0001nobodyさん
04/10/07 23:23:08ID:kiEzDCJF【投稿する際の注意】
質問するときは内容をよく吟味してから投稿してください。
「コマンドの意味がわかんない」とかはマニュアル見ましょう。
回答者さんは何でも屋じゃありません。
1: 自分はこういう事がしたい。
2: それでこんな風にやってみたが・・・
3: こんなエラーが出て上手く行かなかった。
最低でも1と3が無いと誰も答えられないよ。
ソース貼る時は、全角スペースでインデント忘れずに。
良い回答は良い質問から。一緒に勉強しましょう。
過去ログやお勧めサイトは >>2-10
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:???0404nobodyさん
04/10/30 01:10:10ID:???どこがいけないのでしょうか。
0405nobodyさん
04/10/30 01:17:43ID:???http://www.kt.rim.or.jp/%7Ekbk/perl5.005/perlsyn.html#Simple_statements
0406nobodyさん
04/10/30 01:44:29ID:???ありがとうございます。
読んだ上で色々やってみましたが、このような書き方は仕様上不可能のようですね。
お手数おかけしました。
0407nobodyさん
04/10/30 03:37:08ID:???これって常識ですか?
省略したときに $_ を使うようになる条件て何かあるんですか?
0410nobodyさん
04/10/30 10:23:50ID:???0411nobodyさん
04/10/30 10:59:58ID:eCRfKScU文字列ソートを
@data = sort{(split(/\,/,$b))[2] cmp (split(/\,/,$a))[2]} @data;
としてたものを、文字の数でソートしたいと思い、
@data = sort{(split(/\,/,length$b))[2] <=> (split(/\,/,length$a))[2]} @data;
とやってみましたが、ソートしてくれません。
lengthの位置を色々変えてみましたが、ソートしないかエラーかでした。
どうすれば(この場合)[2]番目の文字数でソートできるのでしょうか。
0412nobodyさん
04/10/30 11:13:52ID:zVFP7DHQ環境 -> Linux + Perl5 + cgi-lib.pl
kentさんのjoyfulとか、ほかモジュールを使わないでアップロード機能を
装備しているスクリプトを参考に下記のようにやってみたのですが、
まったくダメダメクンのようです。
ユーザーのファイルを受け取るには、これ以外何をやればよいでしょうか?
どうか教えてください。
$upfile = $in{'img'};
if ($upfile) {
$upfile =~ s/\\/\//g;
$img_file = basename $upfile;
open OUT,">$img_file";
binmode OUT;
binmode STDOUT;
print OUT $in{'img'};
close OUT;
chmod (0666,$img_file);
0413nobodyさん
04/10/30 11:25:33ID:???http://perldoc.com/perl5.8.4/pod/func/length.html
http://perldoc.com/perl5.8.4/pod/func/split.html
http://perldoc.com/perl5.8.4/pod/func/sort.html
http://www.kt.rim.or.jp/%7Ekbk/perl5.005/perlfaq4.html#How_do_I_sort_an_array_by_anyth
>>412
http://cgi-lib.berkeley.edu/
0414nobodyさん
04/10/30 11:27:57ID:???@data = sort{length((split(/\,/,$b))[2]) <=> length((split(/\,/,$a))[2])} @data;
>>412
デリミタの処理が一切見当たらない。
enctype="multipart/form-data"でPOSTしたらどんなデータが送られてくるのか?を確認するよろし。
0415412
04/10/30 11:39:40ID:zVFP7DHQ参考にしてみます。
>>414
>enctype="multipart/form-data"でPOSTしたらどんなデータが送られてくるのか
File::Basenameで取得したファイル名の中に、ローカルパスが格納されています。
001.jpg -------------------------------------------------------------
C:\Documents and Settings\admin\My Documents\My Pictures\任天堂\001.jpg
---------------------------------------------------------------------
てことは、$in{'img'}をopen DATA,"$in{'img'}";する必要があるってことです?
0417412
04/10/30 14:08:03ID:zVFP7DHQみなさまありがとうございました。
0418nobodyさん
04/10/30 14:28:37ID:???諦めた方がいいね
0419nobodyさん
04/10/30 15:15:30ID:???英数字が使えて、最初の文字列にのみ数字を禁止するような
正規表現はどのようにすればいいでしょうか?
正規表現難しすぎる・・・。本読んでも頭がこんがら・・・
分かりやすいサイトあったら教えてください
0420nobodyさん
04/10/30 15:27:19ID:???http://pc5.2ch.net/test/read.cgi/php/1069245758/ に入門しる
0421nobodyさん
04/10/30 17:16:32ID:???車輪の再発明ではなく勉強のためなら↓を見るよろし。シンプルだ。
ttp://tohoho.wakusei.ne.jp/cgi/wwwupl2.txt
実用化するにはもう少し手を加えたほうがよいが。
0422nobodyさん
04/10/30 20:00:53ID:M6l56cQxcgiの再起呼び出しは可能なのでしょうか。
cgi上のフォーム で、cgiの一部を書き変えたいのですが。
0425nobodyさん
04/10/30 23:39:13ID:???1 -> 2 -> 3
と変更していく変数$aを作りたいのですが、
どうすればいいでしょうか?
大まかな方法は何となく分かるんですが、
ロック制御などについてよく分かりません。
0426nobodyさん
04/10/30 23:39:44ID:JL00AQ8N0427nobodyさん
04/10/30 23:58:31ID:???0428nobodyさん
04/10/31 06:04:57ID:PbybcUUPと
s/abc/c/;
s/bbc/c/;
とではどっちが速いですか?
0429nobodyさん
04/10/31 06:43:53ID:/9xW7Y/Dとして、
$query->param('File')
で受け取った値を、同じ(type="file")として別のCGIなどに
渡す事はできないのでしょうか?
調べてみたところ、(type="file")はセキュリティのため、
初期値を設定したりスクリプトで値を操作することが出来ないとされており、
同じ内容を受け渡す事ができず、困っております。
よろしければ、おしえてください。
0431nobodyさん
04/10/31 07:46:09ID:???0432nobodyさん
04/10/31 08:21:16ID:???これらの対応する変数の大きい順番に処理A,B,C,Dを行いたいのですがどうすれば良いでしょうか?
0433nobodyさん
04/10/31 08:23:04ID:???出来ないように作られているので出来ない。
出来るようにすると、お前以外の世界中の人が困るようになるので、出来るようには出来ない。
0434nobodyさん
04/10/31 08:34:02ID:???さんざんガイシュツだがLWP。HTTP::Request::Commonのマニュアルに
例つきで説明されてるのでよく読め。
0435nobodyさん
04/10/31 12:18:51ID:???パスワード認証画面が携帯電話(au W11H)で表示することができないです
<tr>
<td class="ent2">
<table border=0 cellpadding=0 cellspacing=5 width="100%">
<tr>
<td colspan=2>$title</td>
</tr>
<tr>
<td>ユーザー名 :</td>
<td><input type=text name=id size=15 value="$cid"></td>
</tr>
<tr>
<td>パスワード :</td>
<td><input type=password name=pw size=15 value="$cpw"></td>
</tr>
<tr>
<td></td>
<td><input type=checkbox name=cook value="1" $checked>
パスワードを記憶する</td>
</tr>
<tr>
<td colspan=2 align=right height=50 valign=bottom>
<input type=submit value=" OK ">
<input type=reset value="キャンセル"></td>
</tr>
</table>
行数足りなくて最後の方ちょっと省略しましたが
これを携帯で表示させるにはどうすればいいのでしょうか?
0436nobodyさん
04/10/31 14:15:22ID:???丸投げ改造スレへドゾー。
0437nobodyさん
04/10/31 14:18:58ID:???lsコマンド使って、Bサーバのあるディレクトリの一覧を取得するようなことは
可能でしょうか?
0438nobodyさん
04/10/31 14:32:57ID:???いくつかのやり方に応じて適切な条件が揃わないとできんよ。
つーか、逆に言うとそれをやられないように作られてるんだから。
0439nobodyさん
04/10/31 16:29:29ID:???しかし初心者だけにセキュリティ的な部分が非常に気になります・・・。
何かセキュリティ的に大丈夫かどうかチェックする方法ないですかね?
2chでさらす以外で。
他の初心者さんたちはどうしてるんだろ?
0440nobodyさん
04/10/31 16:37:53ID:???じゃなきゃ自分が上級者になる。
0441nobodyさん
04/10/31 22:09:05ID:???只でやりたかったら、どっかで晒すか知り合いに頼むしかないだろ。
金かける気があるならhttp://www.softek.co.jp/Sec/WebProbe/のようなツール使う。
0443nobodyさん
04/10/31 23:47:52ID:???XSSは当然として、セッションハイジャックやSQLインジェクションなど
その他色々。
0445nobodyさん
04/11/01 01:09:12ID:CTnWn+hAうるせーー!!!!!
0446nobodyさん
04/11/01 04:25:18ID:rUgrlUVh月がOctのように英語表記になってしまいます。
これはどのように数字に変更すればいいのでしょうか?
0447nobodyさん
04/11/01 10:51:27ID:???%Month = (Jan=>1, Feb=>2...)みたいなハッシュを用意しといてひけば
とりあえず数字にはなる。
0448nobodyさん
04/11/01 13:02:20ID:???みたいに12行書く。
0449nobodyさん
04/11/01 13:03:07ID:???0450nobodyさん
04/11/01 19:42:22ID:IPrYAMkf100単位でのキリ番は、
$a = substr("カウント値",-2,2);
if($a eq '00'){ print "キリ番"; }
で処理しています。
連番に関してはなかなかいいアイディアが思い浮かびません。
参考となるカウンターやアイディアをご教授ください。
0451nobodyさん
04/11/01 19:52:51ID:???0454nobodyさん
04/11/01 21:05:16ID:IPrYAMkf確かにダサイのですが要望があったので色々と試してました。
0の連続するきっちりのキリ番やゾロ目なら数十桁くらいを配列にいれて
比較してたのですが、連番となると数が多すぎて…
0455nobodyさん
04/11/01 21:17:07ID:???キリ番やゾロ目なら正規表現使う方が賢明だろう
連番はアイデアがないが
「自分が数字を見たとき連番かどうかをどうやって判断しているのだろう?」と
自分の頭の中の認知回路を自己分析してみると
実装可能なアルゴリズムを思いつけるかもしれん
0456nobodyさん
04/11/01 21:18:46ID:???sub zorome { my($x)=@_; $x % ('1' x length($x)) == 0; }
連番:
sub renban { my($x)=@_; zorome($x - substr('123456789', 0, length($x)-1));}
あたりでどう?
0457nobodyさん
04/11/01 21:25:11ID:hZSImnu8while(($var =~ /(\d)/) and ($var =~ s/$1{3}//)){print "連番やん\n";}
■ このスレッドは過去ログ倉庫に格納されています