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

Perl コーディング初心者質問コーナー Part25

■ このスレッドは過去ログ倉庫に格納されています
0001nobodyさん03/06/28 01:18ID:???
いらっしゃーい、Perlのコーディングで困ってる人のスレです。

【投稿する際の注意】
質問するときは内容をよく吟味してから投稿してください。

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:???
>550
if($a=~/^0?$/ && $b=~/^0?$/)
0553nobodyさん03/07/13 14:34ID:???
%uFF2D%uFF33 をエンコードしたいのですがどうすればいいでしょうか。
0554nobodyさん03/07/13 14:35ID:???
>>553 エンコードではなく、デコードです…。
0555nobodyさん03/07/13 14:41ID:???
>>553
http://pc2.2ch.net/test/read.cgi/php/1057947512/15-16
0556nobodyさん03/07/13 15:37ID:6NfNIHy+
perlのコマンドを検索できるサイト(できれば日本語で)はありませんか?
Unixのmanを検索できるサイトなら知ってますが、あんなかんじで
0557nobodyさん03/07/13 15:55ID:???
本番では、unixのサーバ上で動かす予定のCGIを、
windows上で開発するときの、注意点はなんでしょうか?

自分が知ってるのは、
●flockはWinでは使えないので、
 eval(flock (LOCKF, LOCK_SH)); みたいにするってことくらいなのですが
0558nobodyさん03/07/13 16:17ID:???
>557
パーミッションとか色々ありすぎて、並べ上げたらキリがないと思われ。
0559あぼーんNGNG
あぼーん
0560nobodyさん03/07/13 16:30ID:???
>>557
でもパーミッションは、perlそのものでなく、ファイルの問題だから、
FTPでアップするときに注意すればいいだけかと思うのですが・・・。

>並べ上げたらキリがないと思われ。
すいません、よかったら2,3、例を挙げていただけませんか?

自分には一個も他には思いつかず。

#ちなみに、Win2000です。
0561nobodyさん03/07/13 17:01ID:???
>>550
お前、>>438>>461>>465だろ
わからない文が出てくるたび毎回ここで聞く気か?
本でも買ってじっくり読むか文法のサイトでも行って基礎から勉強しろ
0562nobodyさん03/07/13 17:09ID:nQJ8+8Yh
>>551

$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:???
>>560
プログラム上でファイルやディレクトリを作成する場合もあるだろ。
巷のフリー掲示板みたいにログファイルを666でアップしてください、
ってんなら別にいいけど。


#W2kならflockは使えた気がするのは気のせいでつかそうでつか。
#でもEWOULDBLOCKとかはサポートしてないんだよな。
0564nobodyさん03/07/13 17:39ID:???
>>563
そんな機種依存部分はなんとかするだろう普通。
0565nobodyさん03/07/13 17:41ID:NX4Xoj87
>>562
それで説明したつもりなのか?
リファレンスでもコピペしたようだな(プゲラ
これだから無知は。。
どこに真偽が判定されてるんだよ?
横に結果出力ぐらいつけてやれヴォケ
そんなんもできんのならここに来るな夏房
056656403/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:???
>どこに真偽が判定されてるんだよ?
こりゃすげぇ
0569nobodyさん03/07/13 18:02ID:???
もしかして>>565はネタじゃないのかねぇ?
0570nobodyさん03/07/13 18:22ID:???
三項演算子って使ったことない気がする
0571nobodyさん03/07/13 18:29ID:???
三項演算子とif〜elseの使い分けも腕のうちかな

どうやら>>565はそれ以前に三項演算子を知らな(ry…
0572nobodyさん03/07/13 18:45ID:???
ネタというより、単に>>551=565の逆ギレじゃないか?
釣りにしちゃお粗末だし。
0573nobodyさん03/07/13 18:55ID:???
お熱い所すいませんが、お願いします。c で以下の様なコードを
perl で実現するにはどうすればいいのでしょうか?

// c の場合
char * a [] = ( 'aaa', 'bbb', 'ccc' );
char * b = &a[1]; // b[0] = 'bbb'

;# perl の場合
@a = ( 'aaa', 'bbb', 'ccc' );
@b = @{ $a[1] }; # うまくいかない…

# @b にどう代入していいか解りません(´д⊂ヾ
057455703/07/13 18:55ID:???
どなたか、 >>560 のレスおながいします。
0575nobodyさん03/07/13 18:55ID:???
ミスってますね

char ** b = &a[1]; // b[0] = 'bbb'
0576nobodyさん03/07/13 19:01ID:???
>>560
socketの引数が違う
0577nobodyさん03/07/13 19:02ID:???
>>573
Cの部分を何がしたいのか日本語でかけば誰か答えてくれるかもね
0578nobodyさん03/07/13 19:02ID:???
>>568
>>565は、Perlでの真偽がどうかを説明するべき所で、
2つの論理和をとったものの真偽を表示するスクリプトを書いた点について怒ったのでしょう。
0579nobodyさん03/07/13 19:08ID:???
>>573
勘で答えると、

$b[0]に$a[1]を代入したいんでしょ?なら、$b[0] = $a[1]

あ、同じデータを2箇所から参照したいっていうことか。それは今のところできないなぁ。

\$b[0] = \$a[1]、う。文法エラー
0580nobodyさん03/07/13 19:12ID:???
>>577
コメントに書いてありますが

@b には @a[n] の様に添え字をして任意の位置から
参照できるようにしたいんです

@a = ( 'aaa', 'bbb', 'ccc' );
@b = $a[1]; # どう書いていいか解らない。@b には $a[1] からのリストとして代入したい

foreach ( @b ) {
print ;
}
058157303/07/13 19:13ID:???
説明がうまくできなくてすいません(´д⊂ヾ
0582nobodyさん03/07/13 19:25ID:???
理解した。でもPerlはこういうのは得意では無いような…

*方法1
@b = $a[-1], @a;

*方法2
@b = @a[1 .. $#a, 0];
0583nobodyさん03/07/13 19:28ID:???
あ。別に一周させる必要はないのか。
0584nobodyさん03/07/13 19:43ID:lgv8WpE5
mkakikomitaiというBBSにttp://www.minicgi.net/yybbs/yybbs.cgiのようなアイコンプレビュー機能を付けたいので、YY-BOARDのCGI見てここかなと思う部分をmkakikomitai移植してりして、色々試してみたのですが、どうも上手くいきません。
まだPerl勉強し始めて、2ヶ月ぐらいですので、敷居の高い改造であるかとは思いますが、手助けのほどお願いできませんでしょうか?
0585nobodyさん03/07/13 19:49ID:???
@b=('aaa','bbb','ccc')[1..2];
@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:???
>>584
スレ違い

【 スクリプト改造工房 PART 6 】
http://pc2.2ch.net/test/read.cgi/php/1047806915/
058756503/07/13 20:22ID:DslkH4qS
各文の後に結果を書いてやれ、といっただけ
わからない人のためにな
>>562のを実行してたしかめろ!っていうのは初心者にとって嫌だとおもったから
0588nobodyさん03/07/13 20:23ID:???
>>573

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 のソースから考えると、こういうこと?
058958403/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
0591nobodyさん03/07/13 20:59ID:???
>>587
初心者は喪前だ
0592nobodyさん03/07/13 21:02ID:???
windowsつかってます。
cronを使いたいんですがどうすればいいでしょうか?
0593nobodyさん03/07/13 21:03ID:???
>>592
板違い
0594nobodyさん03/07/13 21:06ID:???
スケジューラ
0595nobodyさん03/07/13 21:07ID:???
>>587
自力で理解しようとした形跡の無いヤシに親切心は必要なのか?
0596nobodyさん03/07/13 21:08ID:???
落ち着こう。
0597nobodyさん03/07/13 22:02ID:tSmK0WhU
スレ違いかもしれませんが。。
Apacheだとmod_auth_mysql等を使って、データベース
と連動した認証ができますけど、同じようなことを
IIS + SQLServerで行う方法ってあるのでしょうか?
0598nobodyさん03/07/13 22:11ID:???
スレ違いです。
0599nobodyさん03/07/13 22:28ID:???
>>597
知ってる人がうまい具合に読んでくれて答えてくれることを期待してるでしょ?
誘導を待つのもいいが、適切なスレを自力で探す手間を惜しんじゃいかんよ。
0600nobodyさん03/07/13 22:51ID:???
600 GET ⊂(゚Д゚⊂⌒`つ≡≡≡(´⌒;;;≡≡≡
0601nobodyさん03/07/13 23:06ID:???
おめでとう
0602nobodyさん03/07/14 00:03ID:???
>>578=587
初心者必死だな(w
0603nobodyさん03/07/14 00:22ID:???
WebProg板って、知ったかぶり(>>551)をして、無知を指摘(>>562)されると、
自作自演(>>578)してまで逆ギレ(>>565)する初心者丸出し(>>587)の人が多いよね・・・。
0604nobodyさん03/07/14 01:51ID:???
と、粘着なレスをつける人もかなりたくさんいて
0605nobodyさん03/07/14 02:50ID:???
平和でいいね
0606nobodyさん03/07/14 03:12ID:???
>>551って明らかに初心者いびりのネタだろw
060755603/07/14 03:21ID:???
見事にスルーされてる>>556ですが、
みなさんはコマンド忘れたときどーしてるんでしょうか?
0608nobodyさん03/07/14 03:31ID:???
>>607
ふつーにperldoc -f [command] だろ。

あと、googleで「perl マニュアル 日本語」辺りで引いてみな。
0609nobodyさん03/07/14 03:56ID:???
>>607
すげー暇な時に、
http://www.namazu.org/~tsuchiya/perl/info/perl-ja_toc.html
からHTMLヘルプ作ったので、それ使ってる。
061055603/07/14 04:41ID:???
>>608
いや、うちの環境、
Win上でスクリプト書いて、いちいちテストサーバにアップしてるもんで・・・
SSHつながんないし。

まぁ、cygwin使うという手もあるのだろうけど。。。

>>609
いいですね、これ。
使わせていただきます。
061160803/07/14 04:50ID:???
>>610
Windowsって開発に使ったことないけど、Windows版のperlってperldoc同梱されてないん?
0612nobodyさん03/07/14 05:37ID:???
>>611
もちろん同根されてますよ
0613nobodyさん03/07/14 09:58ID:???
>>612
話題出たついでに。これの日本語版って無いの?
0614nobodyさん03/07/14 10:11ID:???
4ac - b**2 = 0
0615nobodyさん03/07/14 11:20ID:???
みんなlinux使ってるの?
0616nobodyさん03/07/14 11:31ID:???
ターゲットはUNIX系が多いけど、開発は大抵Windowsでやってるよ。

で、Windows版にもperldocはある。
というかインスコしたディレクトリのbin見れ。色々入ってるから。
あとhtml以下もな。
0617nobodyさん03/07/14 11:48ID:???
>>616
だから、それの日本語版が欲しいんだが
0618nobodyさん03/07/14 11:50ID:???
判らなくなったらいつもとほほに繋いでるな
0619nobodyさん03/07/14 12:24ID:???
perlからunixコマンドを呼び出せない環境なので、
unlink<./tmp/*>が使えないのですが、
別の手段(opendir?)で、

./tmp/* にあるファイルを削除する方法はないでしょうか?
0620 ◆hMJAPH9PWA 03/07/14 12:46ID:???
>>617
perldocの日本語版はないけど、有志で翻訳しようというプロジェクトがあるよ。
http://perldocjp.sourceforge.jp/

>>619
標準モジュールのFile::Pathを使う。
0621nobodyさん03/07/14 12:55ID:???
unix使ってる人多いのかなぁ。
0622nobodyさん03/07/14 14:11ID:???
>>615
端末はWindows。FreeBSDにtelnetで繋いでviで書いてる。
0623nobodyさん03/07/14 14:41ID:???
レンタルサーバの引越しをしたのですが。
SSIの動作が異なっているために実行されません。。

SSI実行時のカレントディレクトリが異なっているようです。

サーバ側の設定などで修正は可能ですか?
ファイルの修正は多すぎて大変なので・・・。

解決策をご存知の方教えてください。
0624nobodyさん03/07/14 14:54ID:???
>>623
CGI: Common Gateway Interface part 11
http://pc2.2ch.net/test/read.cgi/php/1055597189/l50
0625nobodyさん03/07/14 15:08ID:???
@tmp = sort { (${ORG[$a]->{adanaid}} <=> ${ORG[$b]->{adanaid}}) } 0 .. $#ORG;
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:hPGUS4Ez
if文で、$a,$b,$c,$d,$e の中に
0の数字が4つ入っていた場合と
指定したいんですが、
どうやれば良いのか、教えて下さい。
0627nobodyさん03/07/14 17:06ID:???
if(&{sub{my $count=0;foreach(($a,$b,$c,$d)){if(m/0/){$count++;}}return $count==4;}}){
    #..
}
0628nobodyさん03/07/14 17:12ID:???
>>626
>>561
0629 ◆hMJAPH9PWA 03/07/14 17:20ID:???
>>625
${ARRAY[$index]->{$key}} は $ARRAY[$index]->{$key} と同じ。
だからダメな理由なんて何も無い。
疑問に思ったら自分で確かめてみようね。

ちなみにその{}はデリファンレンスの為の構文。
リファレンスは便利だから、ちゃんと知ったっておいたほうがいいよ。

# というか、そんな奇怪な構文があったなんて知らなかった…

>>626
なんか二行目から三行目への文の流れがおかしいよ。意味がわからない。
投稿する前に文を見直したほうがいいよ。
0630nobodyさん03/07/14 17:31ID:???
>>627 どういう結果期待してるの?

・4つの 0 が入っている変数を全て知りたい
・どれでもいいから、入っているかどうか知りたい

@poo = ( $a, $b, $c, $d );
foreach ( @poo ) {
print "Found.\n" if ( /0{4,4}/ ) ;
}
0631nobodyさん03/07/14 17:33ID:???
print grep( /0{4,4}/, ( $a, $b, $c, $d ) );

これでもいけるだろ。
0632nobodyさん03/07/14 17:37ID:???
質問者の日本語がおかしすぎる

>>1 の

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

これを示してくれ。最低でも




      1: 自 分 は こ う 言 う 事 が し た い。




って事をはっきりと解りやすく書いてくれ
0633nobodyさん03/07/14 17:49ID:???
1: 自分はこのスレをかき回したい
2: それで意味不明な質問を書き込んでみたが、
3: スルーされてうまくいかなかった
0634nobodyさん 03/07/14 20:20ID:???
>>625

@tmp = sort { (${ORG[$a]->{adanaid}} <=> ${ORG[$b]->{adanaid}}) } 0 .. $#ORG;

ここ

@tmp = sort { $_[$a]->{'adanaid'} <=> $_[$b]->{'adanaid'} } @ORG;

のほうがよかないか?
063563403/07/14 20:49ID:???
>>625
あと、続きもこうなるな・・・

foreach (@tmp) {
    print 'person='. $_->{person}. "\n";
    print 'adana='. $_->{adana}. "\n";
    print 'adanaid='. $_->{adanaid}. "\n";
}

取敢えず、リファレンスの使い方がおかしいということで・・・
0636nobodyさん03/07/14 21:28ID:???
sortの書き方からして、ド素人のコード。
0637nobodyさん03/07/14 21:45ID:???
何もやらずにツッコミだけして去る方が恥ずかしいと思うけどな
0638nobodyさん03/07/14 22:01ID:???
なんでそんなこと書くのかなぁ…

って思ってたら間違いに気づいた。
@tmp = sort { $a->{adanaid} <=> $b->{adanaid} } @ORG;

それと、
${ARRAY[$index]->{$key}}
についてだけど。これは、${hogehoge}の発展形で、
文字列をデリファレンスした時のことを言うソフトリファレンスだとも言えるけど、
Perlのマニュアルには、曖昧さをなくすためのものです。って書いてあるから、
その、デリファレンスという言い方は少しおかしい。
0639 ◆hMJAPH9PWA 03/07/14 22:07ID:???
う〜ん。確かにその式では{}はデリファレンスと直接は関係ないね。
他に適当な言葉が思いつかなかったからさ。

それにしても
${ARRAY[$index]->{$key}}
ってよく使われるんだろうか?
一瞬なにやってるのか分からなかったよ。
0640nobodyさん03/07/14 22:12ID:???
そうせざるを得ない時しか括らないなぁ。
0641nobodyさん03/07/14 22:13ID:???
全部推測で書いたんだけど、、、
そもそも、その書き方は正しいのだろうか…
0642nobodyさん03/07/14 22:15ID:???
あ。OKだった。
0643nobodyさん03/07/14 23:18ID:???
>>636 スレタイすら読めないヴァカ
0644nobodyさん03/07/15 00:09ID:???
粘着か...
0645nobodyさん03/07/15 00:43ID:???
>>639
こういう時は使う。
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:???
($a, $b) = $HOST =~ /\.([^.]+)\.([^.]+)\.jp$/;
064964703/07/15 06:37ID:???
>>648
おおお……しかもご親切なことに、$bの中には!

([^.]+)の部分、1週間近く悩んでも、自分で書けなかったんです。
正規表現の勉強が、まだ全然足りていないようです。
今も、書いて下さった部分を、首っ引きで調べています。

2つの()でグループ化しておいて、$a, $bで参照しているんだな、という
所まではわかりました。$1や$2でなくても大丈夫なんですね。
[^.]+は…任意の一文字以外の文字列の、一回以上の繰り返し…でしょうか(自信なし)。

ともあれ、ここから先は、自力で調べることにします。
本当にありがとうございます。
0650nobodyさん03/07/15 08:21ID:???
>>649
> [^.]+は…任意の一文字以外の文字列の、一回以上の繰り返し…でしょうか(自信なし)。
ちょとちがう。

がんがれ。
0651nobodyさん03/07/15 10:13ID:???
オレも某超有名入門サイトで覚えたから、最初、[ ](文字クラス)いまいち理解できなかったなぁ。
■ このスレッドは過去ログ倉庫に格納されています