Perlについての質問箱 30箱目
■ このスレッドは過去ログ倉庫に格納されています
0001デフォルトの名無しさん
2007/03/14(水) 22:54:12"There's more than one way to do it" ということで、Perlの奥深さについて皆で語り合い、追求してまいりましょう。
CGIについての質問は板違いです。WEBプログラミング板でどうぞ。
CGIとPerlの区別がつかない人もWEBプログラミング板に行ってください。
(WEBプログラミング板 http://pc8.2ch.net/php/ )
CGIの質問は答えがPerlと全然関係ない話に帰着する場合が多かったりするのでWEBプログラミング板に行って聞いたほうが得ですよ。
このスレでは(CGI以外の)純粋にPerlのみに関係する質問を取り扱っていこうと思います。
スレ違いの質問にはスルーか、速やかな誘導をお願いします。
http://www.perl.org/get.html
● 2006/12/21現在の最新版: 5.8.8
● 2006/12/21現在の開発版: 5.9.3
前スレ
Perlについての質問箱 29箱目
http://pc11.2ch.net/test/read.cgi/tech/1166708139/
リンク集は>>2-3
過去スレは>>4
0643デフォルトの名無しさん
2007/05/20(日) 12:40:10map {
$a = $_;
$b = shift @b;
処理
} @a
0644デフォルトの名無しさん
2007/05/20(日) 12:43:41とりあえずリファレンス使わないと、リストのリストとかはできんと思うが。
0645デフォルトの名無しさん
2007/05/20(日) 14:06:29print @$_ for foo([1 .. 5], [6 .. 10]);
sub foo { map [map shift @$_, @_], (1 .. (sort map scalar @$_, @_)[-1]) }
こんな感じか。
0646デフォルトの名無しさん
2007/05/20(日) 14:09:46間違えた。
0647デフォルトの名無しさん
2007/05/20(日) 15:07:14っ[List::MoreUtils]
0648デフォルトの名無しさん
2007/05/20(日) 15:27:33(空白も含みます。)
$text = 'aあ かf漢字';
例えば、上の$textを分解して、
@array = ('a', 'あ', ' ', 'か', 'f', '漢', '字');
のような配列を作りたいのです。
splitを使って
@array = split(/[\w\s]/, $text);
としたのですが、何も格納されずうまく出来ませんでした。
どのようにすれば出来るでしょうか?
0649デフォルトの名無しさん
2007/05/20(日) 15:35:50$text = 'aあ かf漢字';
@array = split(//, $text);
0650648
2007/05/20(日) 15:47:43何も指定しないと一文字単位で分解されるんですね。splitは。
その後、
while($text){
push(@array, substr($text,0,1,''));
}
といったコードを思いついたのですが、
649さんのコードの方がすっきりしてるのでそちらを使わせていただきます。
ありがとうございました。
0651デフォルトの名無しさん
2007/05/20(日) 16:32:30俺は初心者で、この前俺もそういうコード考えて使ってみてわかったんだが、
substrは1バイト単位で長さ見てるけど日本語は2バイトコード使ってたりしてて、
結局その>>650みたいなコードでひらがなやカタカナや漢字取り出すときにsubstr($text,0,1,'')ってところで2バイト中の1バイトしか取り出せなくて中途半端になるんだよな。
2バイト文字限定なら取り出す長さを2バイトにすれば問題無いし、アルファベットや数字は1バイトで問題無いけど。
>>649のコードなら、俺は大丈夫なのかどうかは知らないけど、なんとなく大丈夫っぽい感じする。
0652デフォルトの名無しさん
2007/05/20(日) 16:39:13substrのOFFSETやLENGTHの単位は文字数だから、>>650でも
use encodingで文字コードを適切に指定すれば何の問題もないよ。
0653デフォルトの名無しさん
2007/05/20(日) 16:59:52参考書見て、substrの説明に「文字数ではなくバイト数で取っていることがわかります。日本語の入った文字では使わないようにしましょう」
ってあったから、substrでは永遠に2バイト文字と1バイト数字アルファベットは同時に処理できないものと思ってました。
use encodingで指定すればsubstrでも2バイト文字部分は長さ1となるんですね。
use encodingでコード指定するのが大切ってことを理解しますた。
0654デフォルトの名無しさん
2007/05/20(日) 17:20:46厚みで値段稼いでるような本なら、そのあたりいい加減でも不思議じゃないな。
0655デフォルトの名無しさん
2007/05/20(日) 17:45:13なるほど、確かに初版第1刷が2003年ってなってる。
初心者質問ですが
my@b=("$a[1]","$a[2]","$a[3]","$a[4]","$a[5]","$a[6]","$a[7]","$a[8]");
↑
こういう書き方をもっと短く書けませんか?
既に@aには$a[0]や$a[9]から先にも変数が入ってる状態で、$a[1]〜$a[8]までを@bに入れたいです。
$a[1〜8]みたいな表現が存在するなら表現方法を教えてほしいです。
0656デフォルトの名無しさん
2007/05/20(日) 17:57:06@a[1..8] で OK。
キーワードはスライス。
ところで、なんで "" で囲ってるの?
0657デフォルトの名無しさん
2007/05/20(日) 17:58:21my @b = map "$_", @a[1..8];
0658デフォルトの名無しさん
2007/05/20(日) 18:14:52激しくトンクス!
そういえばfor(0..7)とか使ってました。
@a[1..8]という書き方があったとは。
0659デフォルトの名無しさん
2007/05/20(日) 18:23:29^これや^これの名前ってなんだっけ?
0660デフォルトの名無しさん
2007/05/20(日) 18:39:44なんか$でプレフィクスとか見つけたけど。
@は配列ArrayのAを表し
$は・・・なんだっけ?Sからはじまるなんかの単語じゃなかったっけ?
%は/の左の丸がキーで、/の右の丸が値を示すんだっけ?
なんかそんな感じ。
どうせ声出して読まないし気にするまでも無いような・・・
0661デフォルトの名無しさん
2007/05/20(日) 18:45:220662デフォルトの名無しさん
2007/05/20(日) 18:57:190663デフォルトの名無しさん
2007/05/20(日) 18:59:10sigil だと思う。
sigilsと複数形にすることも多いが
0664デフォルトの名無しさん
2007/05/20(日) 19:10:35どういったものなんでしょう。
役に立ちそうなサイトがあったら教えてください。
0665デフォルトの名無しさん
2007/05/20(日) 19:44:38あーそれそれ。さんくす
0666デフォルトの名無しさん
2007/05/20(日) 20:34:14友達が言ってたんですが他の言語だと20行くらいかかりそうな処理も1行で記述できるくらい魔法ちっくなことができるって聞いたんですが本当ですか?
0667デフォルトの名無しさん
2007/05/20(日) 20:51:05すべてが魔法なので紹介しきれません
0668デフォルトの名無しさん
2007/05/20(日) 21:07:490669デフォルトの名無しさん
2007/05/20(日) 21:14:040670デフォルトの名無しさん
2007/05/20(日) 21:31:150671デフォルトの名無しさん
2007/05/20(日) 21:36:440672デフォルトの名無しさん
2007/05/20(日) 21:46:12もっとやさしく!!
>>669
a + b; b + c; c + d; ... はい1行wwwwwとかは禁止なんです
>>670
もっとやらしく!!
0673デフォルトの名無しさん
2007/05/20(日) 22:03:30では、とっておきの電卓プログラムを紹介しようか。
C++で書くと、何十ステップも必要だろう。
while(<>){print eval($_)}
0674デフォルトの名無しさん
2007/05/20(日) 22:23:07カレントディレクトリ以下のファイルがすべて消えました!><
0675デフォルトの名無しさん
2007/05/20(日) 22:43:53きもい
0676デフォルトの名無しさん
2007/05/20(日) 22:50:560677デフォルトの名無しさん
2007/05/20(日) 22:55:32>>673をしたらキーボードからどんな文も実行できてしまうよな?
>>674を書いて実行してキーボード触らずにマウスで閉じたら何も起きないよな?
恐怖体験アンビリーバブー
0678デフォルトの名無しさん
2007/05/20(日) 22:56:200679デフォルトの名無しさん
2007/05/20(日) 23:18:110680デフォルトの名無しさん
2007/05/20(日) 23:30:26サブルーチンは、多少汚くても短くまとめたいし。
なんか良いサイト無い?
0681デフォルトの名無しさん
2007/05/20(日) 23:31:390682クロニクル ◆ob60wHXQlc
2007/05/20(日) 23:32:46Build 820 setup
の
CustomsetUP のところでInnstlationErroが出るんです。
初心者なのでわからないことがたくさんあります。
以前XPで何度かインストールしたのですが、VISTAになったとたんできなくて
苦労しております。どうかご教授お願いいたします。
0683デフォルトの名無しさん
2007/05/20(日) 23:34:48一子相伝も特殊技術だから。
0684デフォルトの名無しさん
2007/05/20(日) 23:45:25正規表現使ったほうが早いとかある?
0685デフォルトの名無しさん
2007/05/20(日) 23:48:100686デフォルトの名無しさん
2007/05/20(日) 23:51:35このスレの前の方だけでもいくつかあると思うよ。
過去ログ辿ればもっとあるし。
0687デフォルトの名無しさん
2007/05/21(月) 00:12:00(結城さんではなく回答者が時々アクロバティック)
0688デフォルトの名無しさん
2007/05/21(月) 15:57:0406898
2007/05/21(月) 16:50:18記述?だからと思いPERLの詳しくなればわかると思いこの板にきました。
PERLに強くなるにはなにを学べばいいですか?ラクダ本というのがいいとどっかで
見たのですが間違いないですか?
そもそもCGIを自由に使えるようになるのはPERLを詳しくなっても意味ないですか?
CGIを自由に扱えるようになりたいので勉強の仕方わかる方お願いします。
0690デフォルトの名無しさん
2007/05/21(月) 16:54:260691デフォルトの名無しさん
2007/05/21(月) 16:57:15> CGIについての質問は板違いです。WEBプログラミング板でどうぞ。
> CGIとPerlの区別がつかない人もWEBプログラミング板に行ってください。
> (WEBプログラミング板 http://pc8.2ch.net/php/ )
0692デフォルトの名無しさん
2007/05/21(月) 18:50:54向こうでも相手にされていない件についてw
0693デフォルトの名無しさん
2007/05/21(月) 19:01:22かわいそうだからマヂレスしてあげるよ
勉強しなほうが身のため
06948
2007/05/21(月) 19:01:300695デフォルトの名無しさん
2007/05/21(月) 19:01:4806968
2007/05/21(月) 19:02:41なぜ!?
0697デフォルトの名無しさん
2007/05/21(月) 19:03:4506988
2007/05/21(月) 19:07:37悲しいこと言うなぁ・・
0699デフォルトの名無しさん
2007/05/21(月) 19:08:320700デフォルトの名無しさん
2007/05/21(月) 19:11:060701デフォルトの名無しさん
2007/05/21(月) 19:37:260702デフォルトの名無しさん
2007/05/21(月) 19:39:59CGI を覚えるより何より、ここの使い方をまず真鍋
0703デフォルトの名無しさん
2007/05/21(月) 19:50:230704デフォルトの名無しさん
2007/05/21(月) 21:19:43マジレスするのもどうかと思うが、
CGIを勉強したいならラクダ本よりネズミ本がオヌヌメ。
Perlをきちんと習得したいなら、ラクダ本よりリャマ本をまず嫁。
リャマ→ラクダ→ネズミの順で読むといい。
後はWebProg板逝け。
0705デフォルトの名無しさん
2007/05/21(月) 21:23:4507068
2007/05/21(月) 21:24:520707デフォルトの名無しさん
2007/05/21(月) 21:38:57タダで読めるPerl本
ttp://www.perl.org/books/library.html
ネズミ(初版)
ttp://www.oreilly.com/openbook/cgi/
ただリャマだけは小遣い溜めてでも買うべきだと思うんです
0708デフォルトの名無しさん
2007/05/21(月) 23:06:21ラクダも読み物として面白いけど、Cookbookのほうが実践的なテクニックを身に付けられるんでないかな。
0709デフォルトの名無しさん
2007/05/21(月) 23:57:50なんつーか、その、K○NTクローンが増えても困るっつーか
0710デフォルトの名無しさん
2007/05/22(火) 00:20:380711デフォルトの名無しさん
2007/05/22(火) 00:38:13○ャ○から入って、○○○と○○○○○○○○を併用さ。
ラクダ?○○○○○○c で十分
…中途半端じゃない伏せ字も頭悪い。
0712デフォルトの名無しさん
2007/05/22(火) 00:52:260713デフォルトの名無しさん
2007/05/22(火) 00:56:24> ○ャ○から入って、○○○と○○○○○○○○を併用さ。
ジャバ、コボル、N88BASIC?
> ラクダ?○○○○○○c で十分
わがんね。
本題のほうは「なんでバレバレの伏せ字を使う人がいるのか」が昔から不思議。
0714デフォルトの名無しさん
2007/05/22(火) 01:04:420715デフォルトの名無しさん
2007/05/22(火) 01:08:17あえて理由付けするなら、検索に引っかからないため。
まぁ、やってる方の心理としては○○だと思うがw
0716713
2007/05/22(火) 01:20:11ボケが思いつかなくて「わがんね」でした。手間をかけさせてごめんなさい。
>>715
うーん、検索ですか。なるほど。
でも、△△△にする○○の大半は××なだけなんでしょうね。
0717デフォルトの名無しさん
2007/05/22(火) 01:51:290718デフォルトの名無しさん
2007/05/22(火) 02:37:09useを使用し、下位ディレクトリにあるモジュールを読み込むには
use ディレクトリ名::モジュール名;
なのはどの初級者本にも書いてあるのですが、
上位ディレクトリにあるモジュールの読み込み方が分かりません。
パスはどう書けばよろしいのでしょうか?
0719デフォルトの名無しさん
2007/05/22(火) 03:48:180720デフォルトの名無しさん
2007/05/22(火) 07:22:32十代後半の女オタクの馴れ合いみたいで気持ち悪いよね。
0721デフォルトの名無しさん
2007/05/22(火) 08:20:440722デフォルトの名無しさん
2007/05/22(火) 13:39:110723デフォルトの名無しさん
2007/05/22(火) 15:24:140724デフォルトの名無しさん
2007/05/22(火) 15:43:310725デフォルトの名無しさん
2007/05/22(火) 15:58:390726デフォルトの名無しさん
2007/05/22(火) 16:30:10ありがとうございました。できました。
0727デフォルトの名無しさん
2007/05/22(火) 18:07:33爆笑
0728デフォルトの名無しさん
2007/05/22(火) 18:08:03同じプログラム内で再度、標準入力から取得することは可能ですか?
既存のプログラムに、入力チェックを追加したいのですが、2回目はデータが空になります(当たり前?
一応、seekしてみたのですが、うまく戻りそうにありません
バカな質問している気がしていますが、「そんなことできるワケねぇだろ、バカ」でも良いのでアドバイス下さい
0729デフォルトの名無しさん
2007/05/22(火) 18:11:190730デフォルトの名無しさん
2007/05/22(火) 18:23:30>>1嫁
0731デフォルトの名無しさん
2007/05/22(火) 18:25:33過去に戻れるなんて素敵だぜ
0732デフォルトの名無しさん
2007/05/22(火) 18:26:16すみませんでした
そちらで質問してみます
0733デフォルトの名無しさん
2007/05/22(火) 18:41:44このコメントだけで十分な説明になってるな
0734デフォルトの名無しさん
2007/05/22(火) 19:03:040735デフォルトの名無しさん
2007/05/22(火) 20:34:550736デフォルトの名無しさん
2007/05/22(火) 20:36:070737デフォルトの名無しさん
2007/05/22(火) 20:45:580738デフォルトの名無しさん
2007/05/22(火) 21:49:02起動が多少遅くなるので
別な方法がないか教えてもらえませんか
使用用途としては
下記のようなものです
単にifで分けると モジュール部もすべて読み込むようなので
両方ともないとエラーになりました
evalで囲めばそれっぽくうごきますが
しっくりきません。
#ifdef HOGEHOGE
use HOGEHOGE;
〜〜〜
#else
use HOGEHOGE2;
〜〜〜
#endif
0739デフォルトの名無しさん
2007/05/22(火) 22:51:27UNIVERSAL::require 使えば解決するようなコトじゃないかな?
0740デフォルトの名無しさん
2007/05/22(火) 22:52:13use $ENV{'HOGEHOGE'};
とかして環境変数HOGEHOGEから渡せないかなと思ったがダメだった。
0741738
2007/05/22(火) 22:58:53趣旨的には 740のとおり useだけじゃなくて
汎用的に使える方法がないかと(まぁ -Pで出来るんですがあんまり標準的じゃないような気がして)
目的としては、環境がある程度違っても
ソースを複数管理するのは面倒なので同一ソースで動かしたいです
下記のようなのも出来ると非常に助かります
#ifdef hogehoge
while(1) {
#endif
〜〜〜〜〜
#ifdef hogehoge
}
#endif
0742デフォルトの名無しさん
2007/05/22(火) 23:39:45■ このスレッドは過去ログ倉庫に格納されています