Perl コーディング初心者質問コーナー Part25
■ このスレッドは過去ログ倉庫に格納されています
0001nobodyさん
03/06/28 01:18ID:???【投稿する際の注意】
質問するときは内容をよく吟味してから投稿してください。
1:自分はこう言う事がしたい。
2:それでこんな風にやってみたが・・・
3:こんなエラーが出て上手く行かなかった。
最低でも1と3が無いと誰も答えられないよ。
ソース貼る時は、全角スペースでインデント忘れずに。
良い回答は良い質問から。一緒に勉強しましょう。
関連スレ
【Perl上級者コーナーPart01】
http://pc2.2ch.net/test/read.cgi/php/1024741312/
CGI: Common Gateway Interface part 11
http://pc2.2ch.net/test/read.cgi/php/1055597189/
【Perl,CGI】参考書籍 第三版
http://pc2.2ch.net/test/read.cgi/php/1030209573/
【 スクリプト改造工房 PART 6 】
http://pc2.2ch.net/test/read.cgi/php/1047806915/
過去ログやお勧めサイトは >>2-10
0552nobodyさん
03/07/13 14:27ID:???if($a=~/^0?$/ && $b=~/^0?$/)
0553nobodyさん
03/07/13 14:34ID:???0555nobodyさん
03/07/13 14:41ID:???http://pc2.2ch.net/test/read.cgi/php/1057947512/15-16
0556nobodyさん
03/07/13 15:37ID:6NfNIHy+Unixのmanを検索できるサイトなら知ってますが、あんなかんじで
0557nobodyさん
03/07/13 15:55ID:???windows上で開発するときの、注意点はなんでしょうか?
自分が知ってるのは、
●flockはWinでは使えないので、
eval(flock (LOCKF, LOCK_SH)); みたいにするってことくらいなのですが
0558nobodyさん
03/07/13 16:17ID:???パーミッションとか色々ありすぎて、並べ上げたらキリがないと思われ。
0559あぼーん
NGNG0560nobodyさん
03/07/13 16:30ID:???でもパーミッションは、perlそのものでなく、ファイルの問題だから、
FTPでアップするときに注意すればいいだけかと思うのですが・・・。
>並べ上げたらキリがないと思われ。
すいません、よかったら2,3、例を挙げていただけませんか?
自分には一個も他には思いつかず。
#ちなみに、Win2000です。
0561nobodyさん
03/07/13 17:01ID:???お前、>>438>>461>>465だろ
わからない文が出てくるたび毎回ここで聞く気か?
本でも買ってじっくり読むか文法のサイトでも行って基礎から勉強しろ
0562nobodyさん
03/07/13 17:09ID:nQJ8+8Yh$a = "0 but true";
$b = "0\n";
print ((!$a && !$b) ? "true\n" : "false\n");
print ((!($a != 0) && !($b != 0)) ? "true\n" : "false\n");
Perlの真偽はちゃんと覚えておかないと、そのうち火傷しまっせ。
0563nobodyさん
03/07/13 17:37ID:???プログラム上でファイルやディレクトリを作成する場合もあるだろ。
巷のフリー掲示板みたいにログファイルを666でアップしてください、
ってんなら別にいいけど。
#W2kならflockは使えた気がするのは気のせいでつかそうでつか。
#でもEWOULDBLOCKとかはサポートしてないんだよな。
0565nobodyさん
03/07/13 17:41ID:NX4Xoj87それで説明したつもりなのか?
リファレンスでもコピペしたようだな(プゲラ
これだから無知は。。
どこに真偽が判定されてるんだよ?
横に結果出力ぐらいつけてやれヴォケ
そんなんもできんのならここに来るな夏房
0566564
03/07/13 17:48ID:???そもそもUNIXにできてWindowsにできないっていう事しか存在しないんだから、
UNIXで動かそうとしてもどうしても動かないっていう状況は起きないので、大丈夫(?)
0567nobodyさん
03/07/13 17:51ID:???print !!$a . "\n";
print !!$b . "\n";
0568nobodyさん
03/07/13 17:57ID:???こりゃすげぇ
0570nobodyさん
03/07/13 18:22ID:???0573nobodyさん
03/07/13 18:55ID:???perl で実現するにはどうすればいいのでしょうか?
// c の場合
char * a [] = ( 'aaa', 'bbb', 'ccc' );
char * b = &a[1]; // b[0] = 'bbb'
;# perl の場合
@a = ( 'aaa', 'bbb', 'ccc' );
@b = @{ $a[1] }; # うまくいかない…
# @b にどう代入していいか解りません(´д⊂ヾ
0575nobodyさん
03/07/13 18:55ID:???char ** b = &a[1]; // b[0] = 'bbb'
0578nobodyさん
03/07/13 19:02ID:???>>565は、Perlでの真偽がどうかを説明するべき所で、
2つの論理和をとったものの真偽を表示するスクリプトを書いた点について怒ったのでしょう。
0579nobodyさん
03/07/13 19:08ID:???勘で答えると、
$b[0]に$a[1]を代入したいんでしょ?なら、$b[0] = $a[1]
あ、同じデータを2箇所から参照したいっていうことか。それは今のところできないなぁ。
\$b[0] = \$a[1]、う。文法エラー
0580nobodyさん
03/07/13 19:12ID:???コメントに書いてありますが
@b には @a[n] の様に添え字をして任意の位置から
参照できるようにしたいんです
@a = ( 'aaa', 'bbb', 'ccc' );
@b = $a[1]; # どう書いていいか解らない。@b には $a[1] からのリストとして代入したい
foreach ( @b ) {
print ;
}
0581573
03/07/13 19:13ID:???0582nobodyさん
03/07/13 19:25ID:???*方法1
@b = $a[-1], @a;
*方法2
@b = @a[1 .. $#a, 0];
0583nobodyさん
03/07/13 19:28ID:???0584nobodyさん
03/07/13 19:43ID:lgv8WpE5まだPerl勉強し始めて、2ヶ月ぐらいですので、敷居の高い改造であるかとは思いますが、手助けのほどお願いできませんでしょうか?
0585nobodyさん
03/07/13 19:49ID:???@b=@a[1..$#a];
$b=('aaa','bbb','ccc')[1];
@b=('aaa','bbb','ccc')[1..2];
で直接できると思った
$b=(localtime)[3];
見たいに必要な部分直接取ったりできるし。
($day,$mon)=(localtime)[3..4];
@data=(localtime)[3..4];
#($mon,$day)=(localtime)[4..3];#これは無理みたい
0586nobodyさん
03/07/13 20:18ID:???スレ違い
【 スクリプト改造工房 PART 6 】
http://pc2.2ch.net/test/read.cgi/php/1047806915/
0587565
03/07/13 20:22ID:DslkH4qSわからない人のためにな
>>562のを実行してたしかめろ!っていうのは初心者にとって嫌だとおもったから
0588nobodyさん
03/07/13 20:23ID:???my @a = ('aaa', 'bbb', 'ccc');
my @b = (\$a[1]);
printf("\${\$b[0]}\t%s\n", ${$b[0]});
printf("\$a[1] \t%s\n", $a[1]);
${$b[0]} = 'hoge';
printf("\${\$b[0]}\t%s\n", ${$b[0]});
printf("\$a[1] \t%s\n", $a[1]);
------------------------------
$ perl array.pl
${$b[0]} bbb
$a[1] bbb
${$b[0]} hoge
$a[1] hoge
C のソースから考えると、こういうこと?
0589584
03/07/13 20:25ID:lgv8WpE5スレ違いでしたか(汗
じゃあ案内先で再度質問させていただます
失礼しました(´Д`;)
0590nobodyさん
03/07/13 20:26ID:???http://www.roppongi-tv.net/00004/007.shtml
http://www.roppongi-tv.net/00004/hara.shtml
http://www.roppongi-tv.net/00004/shi.shtml
0592nobodyさん
03/07/13 21:02ID:???cronを使いたいんですがどうすればいいでしょうか?
0594nobodyさん
03/07/13 21:06ID:???0596nobodyさん
03/07/13 21:08ID:???0597nobodyさん
03/07/13 22:02ID:tSmK0WhUApacheだとmod_auth_mysql等を使って、データベース
と連動した認証ができますけど、同じようなことを
IIS + SQLServerで行う方法ってあるのでしょうか?
0598nobodyさん
03/07/13 22:11ID:???0599nobodyさん
03/07/13 22:28ID:???知ってる人がうまい具合に読んでくれて答えてくれることを期待してるでしょ?
誘導を待つのもいいが、適切なスレを自力で探す手間を惜しんじゃいかんよ。
0600nobodyさん
03/07/13 22:51ID:???0601nobodyさん
03/07/13 23:06ID:???0603nobodyさん
03/07/14 00:22ID:???自作自演(>>578)してまで逆ギレ(>>565)する初心者丸出し(>>587)の人が多いよね・・・。
0604nobodyさん
03/07/14 01:51ID:???0605nobodyさん
03/07/14 02:50ID:???0608nobodyさん
03/07/14 03:31ID:???ふつーにperldoc -f [command] だろ。
あと、googleで「perl マニュアル 日本語」辺りで引いてみな。
0609nobodyさん
03/07/14 03:56ID:???すげー暇な時に、
http://www.namazu.org/~tsuchiya/perl/info/perl-ja_toc.html
からHTMLヘルプ作ったので、それ使ってる。
0610556
03/07/14 04:41ID:???いや、うちの環境、
Win上でスクリプト書いて、いちいちテストサーバにアップしてるもんで・・・
SSHつながんないし。
まぁ、cygwin使うという手もあるのだろうけど。。。
>>609
いいですね、これ。
使わせていただきます。
0614nobodyさん
03/07/14 10:11ID:???0615nobodyさん
03/07/14 11:20ID:???0616nobodyさん
03/07/14 11:31ID:???で、Windows版にもperldocはある。
というかインスコしたディレクトリのbin見れ。色々入ってるから。
あとhtml以下もな。
0618nobodyさん
03/07/14 11:50ID:???0619nobodyさん
03/07/14 12:24ID:???unlink<./tmp/*>が使えないのですが、
別の手段(opendir?)で、
./tmp/* にあるファイルを削除する方法はないでしょうか?
perldocの日本語版はないけど、有志で翻訳しようというプロジェクトがあるよ。
http://perldocjp.sourceforge.jp/
>>619
標準モジュールのFile::Pathを使う。
0621nobodyさん
03/07/14 12:55ID:???0623nobodyさん
03/07/14 14:41ID:???SSIの動作が異なっているために実行されません。。
SSI実行時のカレントディレクトリが異なっているようです。
サーバ側の設定などで修正は可能ですか?
ファイルの修正は多すぎて大変なので・・・。
解決策をご存知の方教えてください。
0624nobodyさん
03/07/14 14:54ID:???CGI: Common Gateway Interface part 11
http://pc2.2ch.net/test/read.cgi/php/1055597189/l50
0625nobodyさん
03/07/14 15:08ID:???foreach (@tmp) {
print 'person='. $ORG[$_]->{person}. "\n";
print 'adana='. $ORG[$_]->{adana}. "\n";
print 'adanaid='. $ORG[$_]->{adanaid}. "\n";
}
で、
なぜ、sortのときには
${ORG[$a]->{adanaid}}
なのに、printのときは、
$ORG[$_]->{adanaid}
のようになるのでしょうか?
つまり、なぜ
@tmp = sort { ($ORG[$a]->{adanaid} <=> $ORG[$b]->{adanaid}) } 0 .. $#ORG;
ではダメなんでしょう?
このときの{}にはどんな意味があるのでしょうか?
0626nobodyさん
03/07/14 16:31ID:hPGUS4Ez0の数字が4つ入っていた場合と
指定したいんですが、
どうやれば良いのか、教えて下さい。
0627nobodyさん
03/07/14 17:06ID:???#..
}
${ARRAY[$index]->{$key}} は $ARRAY[$index]->{$key} と同じ。
だからダメな理由なんて何も無い。
疑問に思ったら自分で確かめてみようね。
ちなみにその{}はデリファンレンスの為の構文。
リファレンスは便利だから、ちゃんと知ったっておいたほうがいいよ。
# というか、そんな奇怪な構文があったなんて知らなかった…
>>626
なんか二行目から三行目への文の流れがおかしいよ。意味がわからない。
投稿する前に文を見直したほうがいいよ。
0630nobodyさん
03/07/14 17:31ID:???・4つの 0 が入っている変数を全て知りたい
・どれでもいいから、入っているかどうか知りたい
@poo = ( $a, $b, $c, $d );
foreach ( @poo ) {
print "Found.\n" if ( /0{4,4}/ ) ;
}
0631nobodyさん
03/07/14 17:33ID:???これでもいけるだろ。
0632nobodyさん
03/07/14 17:37ID:???>>1 の
1:自分はこう言う事がしたい。
2:それでこんな風にやってみたが・・・
3:こんなエラーが出て上手く行かなかった。
これを示してくれ。最低でも
1: 自 分 は こ う 言 う 事 が し た い。
って事をはっきりと解りやすく書いてくれ
0633nobodyさん
03/07/14 17:49ID:???2: それで意味不明な質問を書き込んでみたが、
3: スルーされてうまくいかなかった
0634nobodyさん
03/07/14 20:20ID:???@tmp = sort { (${ORG[$a]->{adanaid}} <=> ${ORG[$b]->{adanaid}}) } 0 .. $#ORG;
ここ
@tmp = sort { $_[$a]->{'adanaid'} <=> $_[$b]->{'adanaid'} } @ORG;
のほうがよかないか?
0635634
03/07/14 20:49ID:???あと、続きもこうなるな・・・
foreach (@tmp) {
print 'person='. $_->{person}. "\n";
print 'adana='. $_->{adana}. "\n";
print 'adanaid='. $_->{adanaid}. "\n";
}
取敢えず、リファレンスの使い方がおかしいということで・・・
0636nobodyさん
03/07/14 21:28ID:???0637nobodyさん
03/07/14 21:45ID:???0638nobodyさん
03/07/14 22:01ID:???って思ってたら間違いに気づいた。
@tmp = sort { $a->{adanaid} <=> $b->{adanaid} } @ORG;
それと、
${ARRAY[$index]->{$key}}
についてだけど。これは、${hogehoge}の発展形で、
文字列をデリファレンスした時のことを言うソフトリファレンスだとも言えるけど、
Perlのマニュアルには、曖昧さをなくすためのものです。って書いてあるから、
その、デリファレンスという言い方は少しおかしい。
他に適当な言葉が思いつかなかったからさ。
それにしても
${ARRAY[$index]->{$key}}
ってよく使われるんだろうか?
一瞬なにやってるのか分からなかったよ。
0640nobodyさん
03/07/14 22:12ID:???0641nobodyさん
03/07/14 22:13ID:???そもそも、その書き方は正しいのだろうか…
0642nobodyさん
03/07/14 22:15ID:???0644nobodyさん
03/07/15 00:09ID:???0645nobodyさん
03/07/15 00:43ID:???こういう時は使う。
http://pc2.2ch.net/test/read.cgi/tech/1053053082/146-148n
私ゃ普段からデリファレンスは常に %{$hash_ref} みたく冗長に書くなぁ。
その方が入れ子になった時でも統一感が出る。
ソフトリファレンスを使う時は no strict 'refs' が入るし
%{"$hash_name"} みたくダブルクォートや . 演算子使って明示。
0646nobodyさん
03/07/15 01:22ID:m9/vaFbn早くも夏房の季節ですか(プゲラ
0647nobodyさん
03/07/15 02:57ID:???if ($ENV{REMOTE_HOST} eq $ENV{REMOTE_ADDR} or $ENV{REMOTE_HOST} eq '') {
$HOST
= gethostbyaddr(pack('C4',split(/\./,$ENV{REMOTE_ADDR})),2)
or $ENV{REMOTE_ADDR};
} else {
$HOST = $ENV{REMOTE_HOST};
}
という感じで、$ENV{'REMOTE_HOST'}に相当する文字列を抜き出す所までは
できるようになったのですが、そこからドメイン名のみを抜き出す方法が
思いつかず、困っています。
上の文の直後に
if ($HOST !~ /jp$/i) {
&jpigai();
}
といった分岐を入れたので、$HOSTに代入される文字列は全て"*.xxxx.??.jp"
といった形式だと思ってください。
その"*.xxxx.??.jp"の、xxxxの部分のみを取得して、別の変数に入れて
おきたいということです。
後方6文字目のピリオドから、次のピリオドまでの範囲を抜き出すことになるので
後方一致の$を使えば、なんとかなるのではないか?、という所までは
今の所思いついているんですが、そこから先がどうにも……。
perlを触って、まだ間もない者ですが、宜しくお願いします。
0648nobodyさん
03/07/15 04:04ID:???0649647
03/07/15 06:37ID:???おおお……しかもご親切なことに、$bの中には!
([^.]+)の部分、1週間近く悩んでも、自分で書けなかったんです。
正規表現の勉強が、まだ全然足りていないようです。
今も、書いて下さった部分を、首っ引きで調べています。
2つの()でグループ化しておいて、$a, $bで参照しているんだな、という
所まではわかりました。$1や$2でなくても大丈夫なんですね。
[^.]+は…任意の一文字以外の文字列の、一回以上の繰り返し…でしょうか(自信なし)。
ともあれ、ここから先は、自力で調べることにします。
本当にありがとうございます。
0651nobodyさん
03/07/15 10:13ID:???■ このスレッドは過去ログ倉庫に格納されています