Perlコーディング初心者質問スレ Part 42
■ このスレッドは過去ログ倉庫に格納されています
0001nobodyさん
2005/05/25(水) 06:36:28ID:PVpWgcdf【投稿する際の注意】
質問するときは内容をよく吟味してから投稿してください。
「コマンドの意味がわかんない」とかはマニュアル見ましょう。
回答者さんは何でも屋じゃありません。
1: 自分はこういう事がしたい。
2: それでこんな風にやってみたが・・・
3: こんなエラーが出て上手く行かなかった。
最低でも1と3が無いと誰も答えられないよ。
ソース貼る時は、全角スペースでインデント忘れずに。
良い回答は良い質問から。一緒に勉強しましょう。
過去ログやお勧めサイトは >>2-10
0409389
2005/06/15(水) 17:31:01ID:EGr0DnSI有難うございます。
意味わかりました。
>>401
randがついてるので、rand関数により暗号化してるのかと思ったのです。
0410nobodyさん
2005/06/15(水) 17:43:51ID:???crypt() のやってることは厳密には「暗号化」ではないからね。
などと言って混乱させてみるテスト。
0411nobodyさん
2005/06/15(水) 17:44:40ID:???文字列がかぶらないようにするため
0412411
2005/06/15(水) 17:49:12ID:???0413nobodyさん
2005/06/15(水) 17:59:40ID:???それはちょっと無理があるようなw
aaaaaaってパスワードがたくさん登録されれば 1/4096でかぶるわけだし、
そもそもパスワードがかぶっても普通は問題ないし。
0414nobodyさん
2005/06/15(水) 18:05:59ID:???それは 4096個 salt があった場合の話だがな。
違う salt の pwd が2個なら2倍かかる、ってだけ。
0416nobodyさん
2005/06/15(水) 18:24:04ID:???$p = 'password';
($s) = ('∀');
$c = crypt $p, $s;
とかやればコード中に顔文字が出てきて和めるぞ。
0417nobodyさん
2005/06/15(水) 18:25:58ID:???0418nobodyさん
2005/06/15(水) 18:28:26ID:???0419nobodyさん
2005/06/15(水) 18:41:12ID:???v 5.00503 の AAA!cafe だと
× my $fh = undef; open ($fh, '>test.txt');
○ my $fh = \*FILE; open ($fh, '>test.txt');
試しに↓のコードで動かしてみ
#!/usr/bin/perl -w
use strict;
local *FILE;
my $fh = \*FILE;
if ($fh) {
open ($fh, '>test.txt'); print {$fh} 'hogehoge'; close ($fh);
}
print "Content-type: text/html\n\nOK? // $$fh // $fh";exit;
0421nobodyさん
2005/06/15(水) 18:59:46ID:???ちなみに、最近のモダンな crypt() は、 salt の文字種によって、
暗号化の方式 (ていうかハッシュ関数) を切り替えてくれちゃったりするので、
あんまりへんてこりんな文字列を salt に許すと portable じゃなくなったりする罠。
0422考えて半年
2005/06/15(水) 19:50:20ID:biXgIpFaていうか、Perlでチャットとか掲示板とか、画像をうpするとか機能を追加した
ゼロからプログラミング作れるようになるには、どうすればよいのでしょう?
10日で覚える、とほほ、独習、リャマ本、らくだ本、リファレンスなど
よんでも、いまだに初心者です。漏れがbakaなの?
0423nobodyさん
2005/06/15(水) 20:04:08ID:???つーか、このスレのタイトルを変える相談かと思ったw
半年もかじれば、シンプルなカウンターや掲示板くらいならできない?
本を閉じて、試しに作ってみればいい。 分からないときに本を見る。
参考書が一冊もなくても、ネットのあちこちで転がってるし、
生半可な本より充分な内容の perl.doc もある。
とにかく、芸術分野みたいなもんで 「自分で造る」 「自分で調べる」 のが大切。
・・・なんてな。
0424nobodyさん
2005/06/15(水) 20:12:28ID:???凡人プログラマなら、とにかくいっぱい作りまくって練習するしかないかと。
0425nobodyさん
2005/06/15(水) 20:25:54ID:???0426考えて半年
2005/06/15(水) 20:26:41ID:biXgIpFaforeach $lines (@lines) {
($tm,$cnt,$scnt,$ip) = split(/<>/, $lines);
if($ipc==2){&get_;if($cook){ $flag=2; last;}}
if($date eq "$tm") {
if($ipc==1){if ($addr eq "$ip") { $flag=2; last; }}
$flag=1;
$cnt++;
$scnt++;
$lines = "$tm<>$cnt<>$scnt<>$addr<>\n";
}
foreach { から } までを繰り返すコードであることは理解できる。
しかし、{ } の中身が理解できない。
だから、どうしてよいのかわからない。
0428考えて半年
2005/06/15(水) 20:32:45ID:biXgIpFa0429nobodyさん
2005/06/15(水) 20:33:03ID:???0430nobodyさん
2005/06/15(水) 20:37:40ID:???混乱しちゃって、今は何を言われてもポカーンじゃないかな。こんな感じ。
@ @
△
0431nobodyさん
2005/06/15(水) 20:38:07ID:qXBtGg7k空のデータがある時のやり方がどうしても出来ません。
埼玉,東京,群馬
大阪,,奈良
空のデータがある場合はcolspanを使い↓のように連結させる
<table>
<tr><td>埼玉</td><td>東京</td><td>群馬</td></tr>
<tr><td colspan=2>大阪</td><td>奈良</td></tr>
</table>
このようにするにはどうしたらよろしいすか?
サンプル等をご存知でしたら教えていただければ助かります。
0432nobodyさん
2005/06/15(水) 20:40:19ID:???先に普通にテーブル作ってから
<td>([^<]+)</td><td></td>を
<td colspan=2>$1</td>に置き換えるとか
0433nobodyさん
2005/06/15(水) 21:43:22ID:???最初がカンマの場合は全部一番後ろに押し付けてみた。
while (<DATA>) {
chomp;
my $data = $_;
$data =~ s/^(,+)//;
$data .= ',' x (1+length $1);
my @pref = split /,+/, $data;
my @count;
while ($data =~ s/(,+)//) {
push @count, length $1;
}
print qq{<tr>};
my $n = 0;
foreach my $span (@count) {
print $span > 1 ?
qq{<td colspan="$span">$pref[$n]</td>}:
qq{<td>$pref[$n]</td>};
$n++;
}
print qq{</tr>\n};
}
0434nobodyさん
2005/06/15(水) 23:46:03ID:???以下で問題なく動きました…orz
ありがとうございます。
>>9のページではハンドルのリファレンスじゃなくてグロブそのものを入れようとしてるんですが、
そちらだと出来ませんでした。。
#!/usr/local/bin/perl -w
local *FILE;
my $fh = \*FILE;
if ($fh) {
#? エラー
#? エラー
open ($fh, '>./data/test.txt');
print {$fh} 'hogehoge';
close ($fh);
}
print "Content-type: text/html\n\nOK? // $$fh // $fh";exit;
0436nobodyさん
2005/06/16(木) 00:15:51ID:???全体として何をやってるか理解するのは難しいのもあると
思うよ。
このコード結局なにがやりたいんだよみたいな(笑)
0437nobodyさん
2005/06/16(木) 00:43:45ID:???いろいろと難しいかもしれんですな
0438nobodyさん
2005/06/16(木) 01:07:20ID:???SMART はわかりやすいんだけど、ちょっとね。
まあ 5.005のファイルハンドルなら、↓読めば結構理解いいかも。
http://www.kt.rim.or.jp/%7Ekbk/perl5.005/perlfaq5.html#How_can_I_make_a_filehandle_loca
0440nobodyさん
2005/06/17(金) 00:42:38ID:FGf+BXABアルゴリズムって何ですか?perlの文法わかるのに、掲示板とかチャット
とかプログラム作成しようと思うとイマイチ、わかりません。
どうすればよいの?アルゴリズムがわからないから、プログラム作成でき
ないのでしょうか?
0441nobodyさん
2005/06/17(金) 00:48:21ID:???既にあるものを参考にしない事(詰まったときにヒントとしてみるのはあり)ってルール作って。
hallo world表示
↓
フォームの入力内容表示
↓
ファイルの内容を読み込んで表示
↓
フォームの内容をファイルに書き込み
↓
カウンタの作成
↓
一行掲示板の作成
↓
eコマースサイトの作成
0442nobodyさん
2005/06/17(金) 00:55:30ID:FGf+BXAB#! c:\perl\bin\perl
print "Hello Perl\n";
0443nobodyさん
2005/06/17(金) 00:56:02ID:???0444nobodyさん
2005/06/17(金) 01:00:22ID:FGf+BXAB#! c:\perl\bin\perl
print "Enter Word : ";
$word = <STDIN>;
chomp($word);
print "$word\n";
0445nobodyさん
2005/06/17(金) 01:00:53ID:???0447nobodyさん
2005/06/17(金) 01:15:33ID:???#!perl
でも動くことを知った(ActivePerl)
0448nobodyさん
2005/06/17(金) 01:21:15ID:???0449nobodyさん
2005/06/17(金) 01:25:54ID:FGf+BXAB0450nobodyさん
2005/06/17(金) 01:31:45ID:???0451nobodyさん
2005/06/17(金) 01:37:28ID:???わからないポイントが明確になって良かったじゃないか。
html周りって事なら
ttp://homepage2.nifty.com/sak/w_sak3/doc/sysbrd/pe_kj01.htm
とか見てみれば?
0452nobodyさん
2005/06/17(金) 01:41:58ID:???0453nobodyさん
2005/06/17(金) 01:44:09ID:???0454nobodyさん
2005/06/17(金) 02:08:23ID:???%in=map{s/\+/ /g;s/%([\da-fA-F]{2})/chr hex$1/eg;$_}map{split/=/,$_,2}split/&/,$ENV{QUERY_STRING};
print<<HTML;
Content-Type: text/html
<form action=$ENV{SCRIPT_NAME}><textarea name=text rows=20 cols=40>$in{text}</textarea>
<input type=submit></form><hr>
HTML
eval$in{text},$@&&print"<pre>$@</pre>";
0455nobodyさん
2005/06/17(金) 02:48:58ID:???0456nobodyさん
2005/06/17(金) 02:53:14ID:???0457nobodyさん
2005/06/17(金) 07:32:45ID:???もし自分でコードを書くとしたら、テンポラリなハッシュにforeachでキーと値をいちいちぶち込むことになるんでしょうか。
0458nobodyさん
2005/06/17(金) 07:56:09ID:???%y = (%x , %y);
↑の書き方じゃ不満?
my %x = qw(a 1 b 2 c 3 d 4 e 5 f 6 g 7);
my %y = qw(e 01 f 02 g 03 h 04 i 05 j 06 k 07);
print join (', ', map { $_ .'=>'. $x{$_} } sort keys %x), "\n";
print join (', ', map { $_ .'=>'. $y{$_} } sort keys %y), "\n";
%y = (%x , %y);
print join (', ', map { $_ .'=>'. $y{$_} } sort keys %y), "\n";
0459nobodyさん
2005/06/17(金) 08:30:05ID:???0460nobodyさん
2005/06/17(金) 08:46:08ID:???0461nobodyさん
2005/06/17(金) 11:14:38ID:???keys, values, eachはハッシュを変更しない間は同じ順番になることが
保証されている。keysのマニュアルなど参照。
あと、ハッシュをリストコンテキストで評価したときに返るリストも
同じ順番になりそうなもんだが、そういう記述は見つけられなかった。
これはどうなんすかね?
0462nobodyさん
2005/06/17(金) 11:57:39ID:???0463nobodyさん
2005/06/17(金) 12:14:45ID:???0464nobodyさん
2005/06/17(金) 12:17:27ID:???重複するキーの値をどうするか?という問題の希ガス。
%xに%y入れるか、%yに%x入れるか。
0465nobodyさん
2005/06/17(金) 14:45:47ID:???それとも重複したら Array にしたい、とかかねえ。
0466質問
2005/06/18(土) 16:37:14ID:DZNl0XpA自分が作ろうと思っているのは、
ラジオボタンを使ったクイズ、チェックボックスを使ったクイズ、テキストボックスを使ったクイズ
なんですが、
気をつけることなどんなことでしょうか?
自分の考え(素人レベルですが・・)では、ラジオボタンとチェックボックスのほうは問題ないと思うのですが、
テキスト形式は不正な文字や引数を使われるとやばいとおもうので、正規表現でチェックするぐらいしか思いつきません.
0469nobodyさん
2005/06/19(日) 10:05:28ID:a/QQeV38$/ = "a";
chomp($data);
とすると$dataの行末のaを取り除くことができるみたいですが
aとbというような他の文字であっても取り除くようにすることはできませんかね?
PHPでいう$data = rtrim($data, "ab");みたいなことをやりたいんですが。
$/ = "ab";
chomp($data);
ではできませんでした。
0470nobodyさん
2005/06/19(日) 10:16:41ID:???$data =~ s/[ab]\z//;
http://www.kt.rim.or.jp/~kbk/perl-5.8/perlretut.html
0471nobodyさん
2005/06/19(日) 14:29:18ID:???0472nobodyさん
2005/06/19(日) 23:01:48ID:???pingの結果はどうやって得るのですか?
0473nobodyさん
2005/06/20(月) 00:43:18ID:9D61R1Akしたいのですが、うまくいきません。
if ($str =~ /[\xA1-\xFE][\xA1-\xFE]/) {
}
これですと全角全てを許容してしまいますので、何か良い方法が
ございましたらご教示いただきたい次第です。
何卒、宜しくお願いいたします。
0474nobodyさん
2005/06/20(月) 01:08:33ID:???文字コード表は検索すれば出てくるよん。
0475nobodyさん
2005/06/20(月) 01:27:43ID:???0476nobodyさん
2005/06/20(月) 01:30:53ID:???0477nobodyさん
2005/06/20(月) 01:45:43ID:???で何とかなるかと思いましたが。うまく動いてくれませんでした。
皆様、色々とご教示有難うございました。
0478nobodyさん
2005/06/20(月) 01:52:50ID:???http://search.cpan.org/~bbb/Net-Ping-2.31/
0480nobodyさん
2005/06/20(月) 04:43:55ID:???アドバイス有難うございます。
EUCで全て書いて最後にSJISにしてページを出力しているため、
化けてしまうようです。この方法は諦めました。。
文字コードの範囲と言うものが少しわかってきたのですが、まだ
まだ勉強不足なので調べまくっているところです。
貴重なアドバイス有難うございました。
0481nobodyさん
2005/06/20(月) 13:21:42ID:???アバウトだけど叩き台くらいにはなるかしら。
/\A([\xA4\xA5][\xA0-\xFF]|\xA1\xBC)+\z/
0482nobodyさん
2005/06/20(月) 16:36:58ID:???+漢字も含む文字以外を許容しないというものなん
ですね。
この場合は
if ($str !~ /^([\xA1-\xFE][\xA1-\xFE])+$/) {
}
これで問題ないのでしょうか?
0483nobodyさん
2005/06/20(月) 17:47:52ID:/wReIU3Iperlでcgiを作成しているのですが
URLでhoge.cgi?day=20050620
と指定しているのに
--------------------------------
use CGI;
my $cgi = new CGI;
my $gDay = $cgi->param('day');
--------------------------------
というように取得できません、、、
Ctrl+F5で更新すると取れるのですが
なんでなのでしょう?
何か情報をお持ちな方はお教え頂けますとありがたいです。
0484nobodyさん
2005/06/20(月) 18:47:08ID:???0485nobodyさん
2005/06/20(月) 19:04:03ID:???ありがとうございますっ
url_paramというのがあったのですね、、
不勉強でした。
どうもですっ
0487482
2005/06/20(月) 21:33:18ID:???ぐぐりまくってなんとかここまでたどりつきました。
先生方、見てくださると大変助かります。
$eucpre = qr{(?<!\x8F)};
$eucpost = qr{
(?=
(?:[\xA1-\xFE][\xA1-\xFE])* # JIS X 0208 が 0文字以上続いて
(?:[\x00-\x7F\x8E\x8F]|\z) # ASCII, SS2, SS3 または終端
)
}x;
$hiragana = '\xA4[\xA1-\xF3]'; # ぁ〜ん
$katakana = '\xA5[\xA1-\xF6]'; # ァ〜ヶ
$kanji = '[\xB0-\xFE][\xA1-\xFE]'; # 漢字(実際に割り当てのない領域も有るが問題はない)
$nobashi = '\xA1[\xBC\xBD\xC1]'; # ー−〜
if($name !~ m/^$eucpre(?:$hiragana|$katakana|$kanji|$nobashi)+$eucpost$/){}
0488nobodyさん
2005/06/20(月) 22:07:25ID:???・・・にしては最後のアスキーは何なのかわからんか・・・。
全角記号とかはどうなるのかな。
まあ、やりたいことをもちょっと詳しく。 例とかだしてくれるとわかりやすいかも。
0489nobodyさん
2005/06/20(月) 22:58:52ID:???すいません。ファイルオープンについて教えてください。
ファイルを読み書きオープンで開いて、
前の書き込みのデータを参照して処理をしたあとに追加でデータを書き込みたいのですが、
なかなかうまくいってくれません。
どなたかご教授願えませんでしょうか。
【ファイルについての仕様】
・データの追加書き込みがある
・ある程度データがたまったら削除される。
open(DOUT, "+<$log_file");
これだと、ファイルが削除されている場合エラーが出てしまいます。
open(DOUT, "+>$log_file");
open(DOUT, "+>>$log_file");
上2つだとデータが読み込めないんですけど、これは自分の書き方は悪いんでしょうか。
乱文ですけどよろしくお願いします。
0490nobodyさん
2005/06/20(月) 23:01:55ID:???http://www.kt.rim.or.jp/%7Ekbk/perl5.005/perlfaq5.html#How_come_when_I_open_the_file_re
0491nobodyさん
2005/06/20(月) 23:59:48ID:???読み書きopen
} else {
新規でopen
0492nobodyさん
2005/06/21(火) 00:03:52ID:???seek (DOUT, 0,0);
が安定じゃね?
0493489
2005/06/21(火) 00:23:19ID:???>>490
私の目的だと
sysopen(FH, $path, O_RDWR|O_CREAT) || die $!;
sysopen(FH, $path, O_RDWR|O_CREAT, 0666) || die $!;
を選択するのが妥当・・・ですよね。
>>491
なるほど、そういう書き方がありますね。
>>492
open(DOUT, "+>>$log_file");
で
@log = <DOUT>
とすると、@logで値が入ってこないんですけど、
@log = <DOUT>をする前に
seek (DOUT, 0,0);
が必要でしょうか??
また、明朝来ます。
0495482
2005/06/21(火) 02:15:58ID:???説明不足ですみません。
ひらがな + カタカナ + 漢字 + [ー〜] だけを許容したい
ずばり、そのとおりでございます。
「最後のアスキー」とは、何か漏れがあったりしますでしょうか?
0496nobodyさん
2005/06/21(火) 02:28:41ID:???最後の $eucpost の後方参照が必要なのかどうかわからないのだった。
まあいるんならいいんじゃない? それで動けば。
0497nobodyさん
2005/06/21(火) 08:45:48ID:???0498493
2005/06/21(火) 09:46:03ID:???ありがとうございます!なりました。
今までseekを使うことがなく、(<と>>だけ)
いまいち感覚がつかめませんでした。
たすかりました。
ところで、+>>でオープンした場合の書き込みは追記になるので
書き込む前に
seek(OUT, 0, 2);
をする必要はないと考えてよいでしょうか。
今のところ問題ないんですけど、やっておかないとマズイことはありますか?
0499nobodyさん
2005/06/21(火) 10:51:42ID:???use utf8;
$str='日本語';
print length $str, "\n"; # 3
foreach (split //, $str) {
print sprintf("%04X\x20", ord); # 65E5 672C 8A9E
}
utf8で書いたファイルを読み込んで同じことをやろうとするとだめです。
use utf8;
while(<>){
print length $_, "\n";
foreach (split //, $_) {
print sprintf("%04X\x20", ord);
}
}
ちなみにファイルは、以下のもので、
これはutfであります。
結果は、
~$ perl utf_test.pl utf_test.txt
32
0000 FFFD FFFD 0000 FFFD FFFD 0000 FFFD FFFD 0075 0074 0066 0000 FFFD FFFD 0000 FFFD FFFD 0000 FFFD FFFD 0000 FFFD FFFD 0000 FFFD FFFD 0000 FFFD FFFD 000D 000A
cygwinのperl5.8.5でやってます。どうしたら、日本語マルチバイト認識して
くれるんでしょう。
0500nobodyさん
2005/06/21(火) 10:57:18ID:???~$ perl utf_test1.pl utf_test.txt
32
00E3 0081 0093 00E3 0082 008C 00E3 0081 00AF 0075 0074 0066 00E3 0081 00A7 00E3 0081 0082 00E3 0082 008A 00E3 0081 00BE 00E3 0081 0099 00E3 0080 0082 000D 000A
です。よろしくお願いします。
0501nobodyさん
2005/06/21(火) 11:02:53ID:???ttp://sakaguch.com/utf2.html#noteで見つけますた。
use open ":utf8";にすれば、問題なくなりますた。
0502nobodyさん
2005/06/21(火) 11:18:14ID:???use open ":utf8";
use utf8;
while(<>){
# while(/\p{Hiragana}/g){
while(/[ぁ-ヶ]/g){
print "$&\n";
}
}
みたいにすると、結果はOKなんですが、
Wide character in print at utf_test.pl line 6, <> line 1.
Wide character in print at utf_test.pl line 6, <> line 1.
Wide character in print at utf_test.pl line 6, <> line 1.
Wide character in print at utf_test.pl line 6, <> line 1.
Wide character in print at utf_test.pl line 6, <> line 1.
Wide character in print at utf_test.pl line 6, <> line 1.
Wide character in print at utf_test.pl line 6, <> line 1.
Wide character in print at utf_test.pl line 6, <> line 1.
Wide character in print at utf_test.pl line 6, <> line 1.
これは抑止できないんですかね。
0503nobodyさん
2005/06/21(火) 11:44:02ID:???binmode STDOUT, ":utf8";
perldiag(1)のそのメッセージの説明に書いてあったわけだが。
0504nobodyさん
2005/06/21(火) 13:44:01ID:???0507nobodyさん
2005/06/21(火) 16:19:13ID:???POSTしてるからだろ。
ttp://perldoc.jp/docs/modules/CGI.pm-2.89/CGI.pod の
「POSTとURLパラメータの混合」より:
問い合わせ文字列(引数が後ろについた"?"マーク)が入ったURLへ
POSTするフォームを作成することにより、スクリプトはフォームと
同じように CGIパラメータをURLで受け取ることは可能です。param()
メソッドは、 URLの問い合わせ文字列を無視し、常にPOSTされた
フォームの内容を返します。 URLパラメータを取り出すためには
url_param()メソッドを呼び出してください。
0508nobodyさん
2005/06/21(火) 16:51:26ID:???■ このスレッドは過去ログ倉庫に格納されています