Perl コーディング初心者質問コーナー Part34
■ このスレッドは過去ログ倉庫に格納されています
0001前スレの連投で気分崩したので後よろ
04/04/05 16:01ID:???【投稿する際の注意】
質問するときは内容をよく吟味してから投稿してください。
「コマンドの意味がわかんない」とかはマニュアル見ましょう。
回答者さんは何でも屋じゃありません。
1: 自分はこう言う事がしたい。
2: それでこんな風にやってみたが・・・
3: こんなエラーが出て上手く行かなかった。
最低でも1と3が無いと誰も答えられないよ。
ソース貼る時は、全角スペースでインデント忘れずに。
良い回答は良い質問から。一緒に勉強しましょう。
過去ログやお勧めサイトは >>2-10
0604nobodyさん
04/05/08 05:08ID:???# 10
print hex 10;
# 16
0605nobodyさん
04/05/08 12:01ID:???英語版の perldoc などには存在しない。
よって正確な定義もたぶん存在しない。
たぶんCの構造体(struct)との類推で作られた言葉だとは思う。
struct の定義ならCの入門書でも読めばわかるが、
「なぜこんなものが必要なのか、実際何の役に立つのか」ということは
実際にCのプログラムを作ってみないとわからんだろうな。
0606nobodyさん
04/05/08 14:38ID:???$hoge
@hoge
%hoge
0608595
04/05/08 15:22ID:???>>604どうやらhex関数の引数として「0x」をつかうとちょっと違うことになるみたいですね。
通常は「0x」が前につけば単に16進数という宣言みたいですが、どうしてhex関数の引数
で使うとおかしな事になるんでしょう。
そういえば、バイナリ値以外にもchar値とかその他にもいっぱい「〜値」というものが
あるんですね。どっかにいろんな「〜値」について詳しく解説してるサイト知りませんか?
0609nobodyさん
04/05/08 15:59ID:???何もおかしくないのに>>604を見てわからないならかなりニブいな。
packで指定する型のcharやintや浮動小数点だのをひっくるめてバイナリ値を呼ぶ。
どんな型があるかはpack関数を調べればいい。
いいかげんスレ違いになってきたからここらでやめれ。
0611584
04/05/08 16:58ID:???>>584 の質問誰かお願いします。。。
調べたところ、すべてEUCにはされていました。
if ($aiu ne 'all') {
if ($aiu =~ /^([\x00-\x7F]|[\x8E\xA1-\xFE][\xA1-\xFE]|\x8F[\xA1-\xFE]{2})*$array[0]/i ||
$aiu =~ /^([\x00-\x7F]|[\x8E\xA1-\xFE][\xA1-\xFE]|\x8F[\xA1-\xFE]{2})*$array[1]/i) { ; }
else { last; }
}
だと、理想的な結果が出るんですが、2枚目のページにいくと、
結果がクリアされるようなんです・・・。
0612nobodyさん
04/05/08 17:09ID:???誰か2枚目のページってどんなのか知ってる?
知ってる人が教えてあげて。
0613nobodyさん
04/05/08 17:13ID:???0614595
04/05/08 18:04ID:??????
print a; #aが出力
print 0xa; #10が出力
print hex a; #10が出力
print hex 0xa; #16が出力
???
本当にわかりません・・・教えてください。
ところでこの話はスレ違いなんですか?ここは変換処理にかかわる事ならOKっていうわけでは
ないんですか^^;
0615nobodyさん
04/05/08 18:14ID:t33qT0Phif( 文章 =~ 適当な単語) ){
処理
}
という方法では
(´・ω・`) のようなものに引っ掛からないみたいで、、、
こう言う場合はどのようにマッチさせれば良いのでしょう?
0616nobodyさん
04/05/08 18:17ID:???perlはjcodeがいるだろ
0617595
04/05/08 18:24ID:???0xってhexと同じような働きがあるから
print hex 0xa;
っていうのは
print hex (hex a);
と同じことで、流れ的には「a」を10に変換してさらにそれを16進数として評価してしまう!!!
ってことですね^^やっとhex問題が片付いた。バイナリ値問題はまだまだですが++;
ほんと日本語が世界語だったらプログラム用語もPC関連用語ももっと簡単だったろうになあ
0620nobodyさん
04/05/08 18:28ID:???まぁ、釣りではないとして回答しておこう。
>理解できない言葉があると勉強の効率が悪いので私にとっては
>言葉の意味は重要なんですよ。
細かいことにこだわりすぎだと思うがね。
プログラミング用語自体、文脈で結構柔軟な解釈がされることもある。
所詮、用語自体が「表記法」に過ぎないと思う。
>614
hex が文字列を引数としてとること、Perl が型変換を自動で行うこと、
0xa は数値であること、キーワード以外の単語は文字列として扱われること、
以上を元に少し考えてみれば?
>ところでこの話はスレ違いなんですか?
>ここは変換処理にかかわる事ならOKっていうわけではないんですか^^;
スレタイ嫁、変換処理ってなんだよ?
# あと末尾のは顔文字のつもりかしらんが、個人的に妙にいらつくぞ。
>どっかにいろんな「〜値」について詳しく解説してるサイト知りませんか?
総じて Perl コーディング以前の問題のような気がするんだよ。
0621615
04/05/08 18:44ID:t33qT0Ph説明文が激しく半端でした。
HTMLから必要な単語を抜き出して、それがそのHTML内に何回出現しているか
確認するプログラムを書いています。
例えば
<FONT COLOR="#ffff00">そいつぁショボンヌ(´・ω・`)</FONT>
という行からindex関数で前のタグと後ろのタグを見つけて
「そいつぁショボンヌ(´・ω・`)」を単語として抜き出しています。
この単語を文章とマッチさせているのですが、どうも顔文字が上手くマッチしてくれないのです。
他の単語は普通にマッチするようなので、顔文字の文字がまずいのかなと思ったのですが、、、、、
0622nobodyさん
04/05/08 19:02ID:???おれはどんなやつよりも素早く目的のフレーズを探し出して
みせるぜ!
0623595
04/05/08 19:07ID:???コーディング 【coding】
(1)
⇒符号化(ふごうか)
(2)コンピューターなどで,一定のプログラム言語を用いて,プログラムを作成すること。
ふごうか 【符号化】
(1)
〔encoding〕
情報がある一定の規則に基づいて符号に変換されること。記憶における記銘や,非言語コミュニケーションにおける表情の表出などもこの例として捉(とら)えられる。
→解読
(2)
〔数〕
〔coding〕
一連の情報を適切な符号系を定めて符号に変換すること。
とありましたので変換処理とも言えるのかなっと・・・
顔文字の件申し訳ないです。
>総じて Perl コーディング以前の問題のような気がするんだよ。
かもしれませんね。
私的には記述方法とかってあまり問題じゃなくて、関数やコーディングの機能・処理内容自体を日本語のみで全くの素人にでも
教える事ができるようになる事が大切かなって思ってます。なので、細かいとこにこだわって他人より要領が
すこぶる悪い・・・自分でも自覚してます。
とりあずこのスレで、私のように基本的な部分を質問するのは迷惑になってしまうようですね。ごめんなさい。
0625595
04/05/08 19:23ID:???>Perlは基本的にデータを文字列で記憶するからそれをバイナリ値にしたものが
>バイナリ構造体。
バイナリ→テキスト形式(文字データ)以外のデータ形式全般。
値がテキスト形式以外のデータ形式であれば全てバイナリ値。
char値→バイナリ値の分類の中の・・・・
とりあえずここで学んだことをまとめておきました。それでは失礼します。
0626名無しさん
04/05/08 19:29ID:cBod9el7バイナリ構造体なんてどっから拾ってきた言葉だかしらんが、言葉は
何かを説明するためにあるのであって、造語を前提なしに持ち出して
どういう意味なんだと考える自体が無意味。初心的どうこうではない。
プログラムはアルゴリズム実現の表記手段であって哲学的誤謬に陥るのは愚。
>>624 同じく一票
顔文字って()を使うからねぇ。。。Perlのメタ文字が入る場合は注意だし。
0627595
04/05/08 19:31ID:???pack("C*",0x41); #A
第2引数以降のリストで指定したデータを、キーボードから入力可能な文字や記号に
一定の規則をもって変換する。(char値に変換する)
0628nobodyさん
04/05/08 19:34ID:???indexで書いてみるテスト。
my $cnt = 0;
my $pos = 0;
$cnt++ while(($pos = index($data, $match_str, $pos)+1) > 0);
>>595
Perlより先にアセンブラやってみるというのはどう?
# これ以上はスレ違いなので、後は本でも読んでみては。
0629595
04/05/08 20:31ID:???>>628
アドバイスありがとうございます。とりあえず、ゆっくり地道にやっていこうと思います。
バイナリ構造体についての質問は完全にスレ違いでしたね。
ところでこうゆう質問もスレ違いでしょうか?↓
相変わらず基礎的な部分で、コーディング(符号化)の流れについてなんですが、
例えばUNIX系のサーバにあるwebページに対して、「あいうえお」と送ったとします。
そのときの内部で起こっている事は、
1、送られてきた文字データをEUCでコーディング(エンコード)
2、それをさらにASC�Uコードでエンコード
文字列データとして表示させるには
1、まずはASC�Uコード化されたデータを受け取りASC�U方式でデコード
2、それをさらにEUCでデコード
で、合っていますか?なんか違う気もするんですが・・・
一番初めに文字列データをどの形式でコーディングするかの決定権をもっているのは
クライアント側のユーザですよね?受け取り側で自動でされる処理はASC�Uでエンコードするのみですか?
でもそれだと、何故UNIX系でEUCを指定されているのか?ですし・・
・・もしかしてこれもスレ違いな内容でしたら、一言「スレ違い」とお返事ください。
0630nobodyさん
04/05/08 20:33ID:???$_[0] =~ s/([^=^\"]|^)(https?\:[\w\.\~\-\/\?\&\+\=\:\@\%\;\#\%]+)/$1<a href=\"$2\" target=\"_blank\">$2<\/a>/g;
}
この場合
URLがある文字数を超えたときにそれ以降を省略するようにするにはどうしたらいいのでしょうか
substrとか使えばいいんだと思うんですけどよく解りません。
0632nobodyさん
04/05/08 21:52ID:???my $limit = 16;
s/([^=^\"]|^)(https?\:[\w\.\~\-\/\?\&\+\=\:\@\%\;\#\%]+)/
"$1<a href=\"$2\" target=\"_blank\">".substr($2, 0, $limit).
(length($2) > $limit && '..')."<\/a>"/egx;
こんなとか。
0634nobodyさん
04/05/08 22:37ID:???0635630
04/05/08 23:06ID:???0636nobodyさん
04/05/09 06:07ID:6P0icBMnファイルオープン後、
@temp = <FH>;
とすると行ごとに配列へ格納されますが、
\nも含めてひとつのスカラ変数に格納したいのです。
普通はjoin関数であとから結合するのでしょうか?
どうも冗長な気がし質問しました。
0638636
04/05/09 11:39ID:6P0icBMnありがとうございます!
$1〜、$_以外の特殊変数はまだまだ理解出来ないと思ってたら、こうやって使うんですね。
0639nobodyさん
04/05/09 12:54ID:LzQ8Bs2h@list = (0,1,2,3,4,5,6,7,8,9,10,11);
sub number {
if ($a < $b) {
return -1;
} elsif ($a == $b) {
return 0;
} elsif ($a > $b) {
return 1;
}
}
@result = sort number @list;
@resultが何故0,1,2,3,4,5,6,7,8,9,10,11になるのか理解できません。
漏れの考えですが、$aに0、$bに1が代入される。比較され-1が返る。@resultの第一要素は「-1」になる。
以降繰り返しで@resultは-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,1となるのでは?と考えました。
@resultが何故0,1,2,3,4,5,6,7,8,9,10,11になるのか教えてください。
0640nobodyさん
04/05/09 13:44ID:???$a == $b なら ($a, $b) のまま
$a > $b なら ($b, $a)
の配列要素の順番入れ替えをおこなうのが sort 関数
数値の昇順や降順にソートすることは簡単にできる。
@result= sort {$a <=> $b} @list;
@result= sort {$b <=> $a} @list;
0642nobodyさん
04/05/09 15:48ID:???0643nobodyさん
04/05/09 16:26ID:Si4CJEJNopen(IN,"/なんとか/test.cgi|");
@file = <IN>;
close(IN);
print @file;
だと出来るのに
open(IN,"/なんとか/test.cgi?hoge|");
@file = <IN>;
close(IN);
print @file;
だと「sh: /なんとか/test.cgi?hoge: No such file or directory」と表示され開けません。
どなたかご教授ください。
0644nobodyさん
04/05/09 16:39ID:???0645nobodyさん
04/05/09 16:44ID:???0646nobodyさん
04/05/09 16:48ID:???0647nobodyさん
04/05/09 16:51ID:???失敗する、間違いない。
2ちゃんの掲示板だからこそ、人が集まりこういう流れが成立してる。
他スレでもそういう案は見かけるが、大抵が誘導に失敗し元に戻る。
Q&Aのデータベースなら活用されるとは思うが。
0649nobodyさん
04/05/09 16:57ID:???0650nobodyさん
04/05/09 17:49ID:???ム板のPerlスレにもそんなことをやろうとしたヤシがいたが、結局公開に至らず。
日本人って熱は冷めやすいから、飽きたんだろうね。
そういうことなので、>>648にはごく基本的なシステムでとりあえず公開することをきぼん。
その上で突込みが入れば修正すればいいんだし、自分で修正できなかったらここで質問すればいいんだし…
0652nobodyさん
04/05/09 18:06ID:???ちょっとしたシステムの不満でもみんな吐きまくるぞ。
そして最後には自分で作った方が早いとなっていく。
他人のシステムで満足できるような人間はこのスレにあまり来ないだろうし。
やるんだったらいっそ逆にPerl使わないほうが安全かも。
もしくはこのスレ住人の力を結集して作っていくか。
0653名無しさん
04/05/09 18:14ID:???俺はめんどくさいしやる気も無いのだが、まずは
過去ログを全検索して一覧表示できるようにっつうのは?
あとは>>をみてリンクツリー構成表示するとかね。
手動なんて絶対力つきるしPerlスレなんだからPerlつこて自動化すれ。
0654nobodyさん
04/05/09 18:17ID:???0655643
04/05/09 18:19ID:???盛り上がっているところすいません
open(IN,"/なんとか/test.cgi hoge|");
として受け取るtest.cgiに@ARGVを使うということでしょうか?
test.cgiに手を加えないで出来る方法があったらその方がよいのですが無理ですか?
0656nobodyさん
04/05/10 00:13ID:???0657nobodyさん
04/05/10 12:53ID:???AUだけ
掲示板に書き込んだ→書き込み完了画面表示→戻るリンク(その掲示板のトップへ行く)
この最後の戻るリンクをクリックすると、また書き込みしちゃうんだけど、どうすれば対処できるんでしょうか?
imode、vodafoneはちゃんと掲示板のトップに戻ってくれるんですが orz
0658nobodyさん
04/05/10 13:05ID:???>>1
http://www.au.kddi.com/ezfactory/
0660nobodyさん
04/05/10 14:41ID:???0661nobodyさん
04/05/10 14:48ID:9bXUHl3jというプログラムを書いています。
少々疑問に思ったのですが、ソケットでHTMLを獲得するのと
ウェブブラウザでHTMLを獲得するのとでは何が違うのでしょう?
処理するのがユーザ側かサーバ側か、の違いと見て良いんでしょうか。
0662nobodyさん
04/05/10 15:08ID:???ブラウザも同じソケット通信してるから、同じこと。
そのようにサーバ側でソケット使おうとユーザ側で使おうと
どちらもHTTPクライアントリクエストをwwwサーバに対しておこなっている
0663nobodyさん
04/05/10 15:17ID:???PHPなら$foo = "val";のとき$$fooで$valにアクセス出来ますが,Perlはちょっと違いますか?
$val = "hoge";
$prm = "val";
print $$prm; #「print $val;」と同じ結果
$val = "hoge";
$HASH{'prm'} = "val";
print $$HASH{'prm'}; #ダメ
0664nobodyさん
04/05/10 15:25ID:???0665nobodyさん
04/05/10 15:28ID:???use strict;
my $val = "hogehoge";
my $prm = "val";
print $$prm; #だめ
print ${$prm}; #これもだめ
0666nobodyさん
04/05/10 15:34ID:???他のアプローチを考えたほうが早いと思うが…
0667nobodyさん
04/05/10 15:36ID:???0668nobodyさん
04/05/10 15:41ID:???my $prm= 'val';
my $$prm= 'hoge';
print $$prm;
or
#use strict;
0669nobodyさん
04/05/10 15:50ID:???0671nobodyさん
04/05/10 16:04ID:???my $$prm= 'hoge';
なんてのは無理ってもんだろう。
0672nobodyさん
04/05/10 16:18ID:???どうすればいいのでしょうか。
以下のようでは空っぽのままです。
--
$test = &hairetu;
print $test[0][0];
print $test[1][1];
sub hairetu {
$box[0][0] = 0;
$box[0][1] = 0;
$box[1][0] = 0;
$box[0][2] = 0;
return $box;
}
0673nobodyさん
04/05/10 16:19ID:???×$box[0][2] = 0;
○$box[1][1] = 0;
0674nobodyさん
04/05/10 16:40ID:???print $$test[0][0];
print $$test[1][1];
sub hairetu {
$box[0][0] = 0;
$box[0][1] = 0;
$box[1][0] = 0;
$box[1][1] = 0;
return \@box;
}
0675nobodyさん
04/05/10 16:46ID:???$test = &hairetu;
print $test->[0][0];
print $test->[1][1];
sub hairetu {
$box->[0][0] = 0;
$box->[0][1] = 0;
$box->[1][0] = 0;
$box->[0][2] = 0;
return $box;
}
0677674
04/05/10 16:59ID:???0678661
04/05/10 17:04ID:9bXUHl3jするとソケットを使用したHTML取得CGIをAと言うサーバに置いた場合
ブラウザからCGIを呼び出すと
ブラウザ→CGI→HTML (→はリクエスト)
となるのではなく
ブラウザ→HTML
となるのでしょうか?
CGIを置いたサーバに負荷が掛かりそうでちょっと尻込みしているのですが
サーバ側に負荷は行かない、のかな?
0679nobodyさん
04/05/10 17:07ID:???でもそんなこと言ってたらCGIは何一つ動かせない。
それ以前に、ソケットの使えないところも多いけどね。
0681nobodyさん
04/05/10 19:02ID:???戻るリンクの代わりに戻るフォームもしくはlocationで飛ばす。
でいいような気がするけど確信はない。
いい加減な情報でスマソ。
0682nobodyさん
04/05/10 19:05ID:???0683nobodyさん
04/05/10 19:13ID:???0684すまん
04/05/10 19:14ID:DDeHe7Rs調べるにはどうしたらいいの?
0685nobodyさん
04/05/10 19:54ID:???0686nobodyさん
04/05/10 21:18ID:???http://www.kt.rim.or.jp/%7ekbk/perl5.005/perlref.html
>>684
http://www.din.or.jp/~ohzaki/perl.htm#Character
0687nobodyさん
04/05/11 00:27ID:???詳しく載ってる本やサイトってないでようか?
0688nobodyさん
04/05/11 00:53ID:???ラクダ本とか perlref じゃ駄目?
0689nobodyさん
04/05/11 01:07ID:???ブラウザで個人的に見るのは著作権的に合法。
ソケットでCGIで取得して不特定多数に閲覧可能な状態にしてしまうのは著作権的に違法。
0691nobodyさん
04/05/11 07:45ID:???「恥知らず」という言葉を思い出したよ。
>「でも、本当に簡単なミスでも、指摘されるまで気付かないことだってありますよ。 」
簡単なミスに、指摘されるまで気付かない事自体
恥ずかしい事と思わなかったのか?
そういう台詞を言う事自体「甘え」だと思わなかったのか?
ちゃんとした大人なら、そんな甘えた台詞は恥ずかしくて言えないものだが。
こういうやつが設計をやると、三びし自みたいな日さんな事故がおきるんだろうな。
0692nobodyさん
04/05/11 08:26ID:???0693nobodyさん
04/05/11 10:07ID:???文章に自信が無いから飾ってるだけ。
0694nobodyさん
04/05/11 10:37ID:???他人様のスクリプトを見てみたところ
ロックしている方もいますし、ロックしていない方も居ます。
0695nobodyさん
04/05/11 10:47ID:???書き込んでいる真っ最中のデータを読み込んだり、
読み込んでる最中に書き込み始めたりしてもいいのなら
読込時に排他処理は不要。
「共有ロック」なんてのも調べてみると吉。
0696nobodyさん
04/05/11 12:08ID:yHiP+CICやっぱり書き込んでいる真っ最中のデータを読み込んだり、
読み込んでる最中に書き込み始めたりしちゃうわけですね。
システム側でなんとかしてくれるのかと思ってました。
共有ロック、取り入れてみたいと思います
ありがとうございました
0697nobodyさん
04/05/11 13:57ID:xHapOBBnサーバーがLocationヘッダで指定されたファイルを返すのか、
どちらでしょう? どちらでもなければ、それを教えてください。
0699nobodyさん
04/05/11 14:25ID:???サーバをテストに使ったらファイルが消えた時に責任取れないんで
ローカルでテストしたいんですがどうすれば・・・
0700nobodyさん
04/05/11 14:51ID:???0701nobodyさん
04/05/11 14:55ID:???そしたらinstall_driver(mysql) failed: Can't locate DBD/mysql.pm in @INC ...
とエラーがでました。
恐らくモジュールが入ってないのかと思いますが
どうすればインストールできるでしょうか。
一応、Msql-Mysql-modules-1.2219と言うのをDLしてきましたが
root権限など持っていないので説明にある方法ではインストールできません。
cgiとおなじフォルダにmysql.pmを置いてやれば動くような気もしますが
取り敢えず/mysql/libの中身をまるごと置いてやっただけでは動きませんでした。
0702699
04/05/11 15:42ID:???0703nobodyさん
04/05/11 15:49ID:???winのローカル環境で動かしたいなら
http://x-web.pobox.ne.jp/fcgi/fcgi_01.html
が分かりやすいと思います
■ このスレッドは過去ログ倉庫に格納されています