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
0074nobodyさん
03/06/29 21:34ID:15+Vm9kH&function($year,$mon,$day,$hour,$sec,$min);
とすると1056889951がリターンされてくるような。
0075nobodyさん
03/06/29 21:36ID:???0076nobodyさん
03/06/29 21:36ID:oIT5F8QqPOSIX::mktime()
ちなみに標準ライブラリ
007755
03/06/29 21:37ID:???>>56-58のみなさん
ありがとうございます。
解決しました。
UNICODEは%uに(4桁の16進数)が組み合わさるので、
Hで16進数、4で4桁ということでいいんですよね…?
007855=74
03/06/29 21:39ID:???>>75-76のお二人
ありがとうございました。
標準ライブラリももっと勉強した方がよさそうです(汗)。
0080あぼーん
NGNG0081119
03/06/29 22:52ID:tnHKF+kRこれをそのままフォームのボタンを押すことで同一のページに返したいのですが、
いちいち<input type="hidden" name="test" value="test">などとしないといけない
のでしょうか。
0082nobodyさん
03/06/30 00:13ID:???0083nobodyさん
03/06/30 00:19ID:???0084nobodyさん
03/06/30 01:01ID:???ググっても分かんないッス・・
0085nobodyさん
03/06/30 01:34ID:???0086nobodyさん
03/06/30 01:58ID:???0087nobodyさん
03/06/30 02:01ID:???>>84
coding
アルゴリズムや処理をコンピュータプログラムとして具現化すること。
または単にプログラムを作成すること。
0088nobodyさん
03/06/30 02:32ID:???0089nobodyさん
03/06/30 03:30ID:???0090nobodyさん
03/06/30 03:35ID:???0092座敷荒氏
03/06/30 06:49ID:???あのあと自分なりに勉強し、パラメータファイルを使用して
ファイル確認することができるように下のように書き換えました。
こちらはうまく動作しています。
#! /usr/bin/perl
while (<>){
($cmd_para) = split;
unless(-e $cmd_para){
exit(100);
}
}
exit(0);
そこで次にファイル削除を作成しようとおもい、
上記の箇所unlessをunlinkに書き換えたところ
シンタックスエラーが発生してしまいます。
どう修正すればいいのでしょうか。
よろしくお願い致します。
0093nobodyさん
03/06/30 07:04ID:???なんか基本がなってないような……
unlessは制御構造。unlinkは関数。名前は似てても、使い方は全く違うものだよ。
前スレ読めないんで、どうやりたいのかもうちょっと具体的に説明して。
それから今回はいいけど、エラーはできるだけ原文をそのまま書いてね。
カタカナで書くと、読み方を間違えていたり、肝心なところ(大抵読み方が分からない単語)を省略してたりして
意味が正しく伝わらないことがあるから。
0094nobodyさん
03/06/30 08:15ID:???0095nobodyさん
03/06/30 08:45ID:???いけないの?
0096座敷荒氏
03/06/30 10:20ID:???92に記載したのは確認したいファイルのフルパスを記載した
パラメータファイルを用意し、そのファイル名を指定して実行すると
ファイルがある場合には0を返して終了し、ない場合には100を返して終了する、
というプログラムです。
これと同じように、削除したいファイルのフルパスを記載した
パラメータファイルを用紙し、そのファイル名を指定して実行したときに
ファイルが削除できた場合には0を返して、ない場合には100を返して終了する、
というように動作するものを作りたいと思います。
92に記載したようにunlessをunlinkに書き換えただけで実行すると
syntax error at ./test line 4, near "){"
syntax error at ./test line 5, near "}}"
Execution of ./test aborted due to compilation errors.
と表示されてしまいます。
0097nobodyさん
03/06/30 10:31ID:???0099543
03/06/30 15:38ID:???お教え頂いたように修正しましたが
bash: ./Perltest: bad interpreter: Permission denied
と表示されてしまい、うまく動作しません。
使用したPerlファイル・パラメータファイル・削除対象ファイルの
パーミッションは設定済みです。
0100nobodyさん
03/06/30 16:03ID:???0101nobodyさん
03/06/30 16:05ID:???Content-Lengthが付いて無いファイルのサイズを取得する手段は無いものでしょうか。
0104nobodyさん
03/06/30 16:35ID:???おそらくHTTPヘッダのことを言ってるんだろうけど。
0105nobodyさん
03/07/01 09:06ID:???0106nobodyさん
03/07/01 12:57ID:???0107nobodyさん
03/07/01 13:18ID:???ADSLモデムにアクセス(192.168.1.1)して
Pingを発行しネットワーク接続監視を行う
接続されているのならば接続中の文を表示し
切断されているのならば警告文とアラーム音を鳴らし
知らせる。
最終的には24時間連続稼動させたい。
ソース
use Net::Ping;
$host = "192.168.1.1";
if (pingecho($host, 10)) {
print "$host is alive.\n";
}else{
print "$host is dead.\a;\n";
}
エラー
The Unsupported function alarm function is unimplemented at c:perl/lib/net/Ping.pm line 308
エラーの意味がわかりません、よろしくお願いします。
0108107
03/07/01 13:21ID:???Perlでbeep音を鳴らそうと
\aでアラーム音のエスケープシーケンスを使用しましたが
音が鳴りませんでした。
音を鳴らす方法が間違ってるでしょうか?
0109nobodyさん
03/07/01 13:56ID:???0110nobodyさん
03/07/01 14:07ID:???環境くらい書けよ。
意味がわからなかったら調べろよ。
http://www.google.com/search?num=100&hl=ja&lr=lang_ja&ie=UTF-8&inlang=ja&c2coff=1&safe=off&filter=0&q=%54%68%65%20%55%6E%73%75%70%70%6F%72%74%65%64%20%66%75%6E%63%74%69%6F%6E%20%61%6C%61%72%6D%20%66%75%6E%63%74%69%6F
%6E%20%69%73%20%75%6E%69%6D%70%6C%65%6D%65%6E%74%65%64%20%61%74%20%63%3A%70%65%72%6C%2F%6C%69%62%2F%6E%65%74%2F%50%69%6E%67%2E%70%6D%20%6C%69%6E%65%20%33%30%38%20
(行長すぎって言われたから途中ぶった切り。)
英語がわからなかったら調べろよ。
http://www.excite.co.jp/world/text/?wb_lp=ENJA&before=The%20Unsupported%20function%20alarm%20function%20is%20unimplemented%20at%20c:perl/lib/net/Ping.pm%20line%20308%20
0111nobodyさん
03/07/01 14:36ID:???ActivePerlで、\aで鳴る音をユーザ定義できない?
0112nobodyさん
03/07/01 15:13ID:???0113nobodyさん
03/07/01 15:36ID:???環境
ActivePerl v5.8.0.806 + Perlを始めよう! v.2.0.4.5
0114nobodyさん
03/07/01 15:52ID:???windows なんて厨房の使う os 知らんから、あとはヨロ
↓
0115nobodyさん
03/07/01 16:31ID:???systemで呼べばいいだけの話か
0116nobodyさん
03/07/01 16:42ID:hz3sfxOdWEB上のFROMから入力された文字や数字は、さまざまなコードで入力されるため
jcode.pl 等を使いコード変換する必要性は理解できます。
しかし、自分が作成したHTMLから自分が作成したCGIをパラメータ付きで呼び出すとき
CGI側はその受け取ったデータをコード変換する必要はあるのでしょうか?
例えは、index.html 内に <a href="http://aaa.com/test.cgi?id=123&name=abc">
があり、これをクリックした場合、test.cgi で受け取る id=123&name=abc は
変換する必要があるか、という事です。
よろしくお願いします。
0118nobodyさん
03/07/01 17:17ID:???FROMはFORMのことでしょうが
IEやNetscapeブラウザではurlエンコードして送りますから普通はurlデコードしますね。
英数文字だけだったら問題ないけど一応やっとけ。
0119nobodyさん
03/07/01 17:51ID:9B8Cvuqqそんなものぐらいbatで書けよ・・・
0120座敷荒氏
03/07/01 17:54ID:???別にパラメータファイルを用意し
そのパラメータファイルにフルパスで書かれたファイルを
削除するPerlを作っているのですが、97さんに教わったとおりに
書き換えて下記のようにして実行したところ
エラーが発生してしまいます。
#! /home/perl/test
while (<>){
($cmd_para) = split;
unless(unlink($cmd_para)){
exit(100);
}
}
exit(0);
↓実行したものとエラー内容
$ ./Perl名 パラメータファイル名
bash: ./Perltest: bad interpreter: Permission denied
お力添えのほど、宜しくお願い致します。
0121nobodyさん
03/07/01 18:04ID:???関係ないが、珍しいものを見た
0122あぼーん
NGNG0124nobodyさん
03/07/01 18:09ID:F5KDEjxA#!の行がおかしいってエラーが出てるぞ。
0125nobodyさん
03/07/01 18:09ID:???何でもかんでも一度に書くな。
#! /home/perl/test
print "hello, world\n";
からやり直せ
0126あぼーん
NGNG0127nobodyさん
03/07/01 18:25ID:ycS3U73c0128座敷荒氏
03/07/01 18:27ID:???あ、できました。
どうもありがとうございます。
原因は本番環境から自前の環境に持ち込んだときに
書き換えたミスです。削除対処ファイルへのパスを記入していました。
124さん、他に助言してくださったみなさん、
本当にありがとうございました。
>>125
はい、仕事で作る事になったので
順番に勉強する暇がありませんでした。
これからもう一度勉強をしますので
宜しくお願い致します。
0129nobodyさん
03/07/01 19:43ID:hz3sfxOdCGIに送るのは数字だけなのですが、
念のために変換かませておきます。
ありがとうございました。
0130nobodyさん
03/07/01 19:58ID:???0-9a-zA-Z以外のものが入るのなら、変換しとけ。
0131nobodyさん
03/07/01 21:02ID:soOdqVTPpingはネットワークに負荷かけるぞ。
普通にsocket作ってbindしてconnectして失敗したらエラーでいいだろ。
モジュール使ったら3行くらいで作れそうな気がするが。
(使わなくても10行くらい)
0132nobodyさん
03/07/01 21:03ID:???0133nobodyさん
03/07/01 21:31ID:???0134コミュカレ
03/07/01 21:41ID:aHlU6obt一部の限られた組織等でしか利用されていなかったグループウェアを、
一般ユーザーも利用できるインターネット上のパーソナルグループウェアへ
「コミュカレ」はフリーソフトです。
ゴミの収集日等、地域の皆様どおしでも使えます。使い方はユーザー次第!!!
いろんな活用の仕方が考えられます。
その便利さを是非お試しになってみて下さい。
http://www.ecopig.jp/comucale/index.htm
0136nobodyさん
03/07/01 23:25ID:qNSyt42Zリンク先でどのように取得したらよいのですか?
よろしくおねがいします。
0137nobodyさん
03/07/01 23:27ID:???($y)=$ENV{QUERY_STRING}=~/y=([^=]*)/;
0140136
03/07/02 00:49ID:tWYlFrFCご回答ありがとうございました。
このようにしました。
($xdate,$ydate)=split(/&/,$ENV{QUERY_STRING});
($x)=$xdate=~/x=([^=]*)/;
($y)=$ydate=~/y=([^=]*)/;
0142nobodyさん
03/07/02 01:12ID:DMMsk6IB素直にReadParse使えや。
よっぽど簡単
0143nobodyさん
03/07/02 01:17ID:DMMsk6IBhttp://top.dmm.co.jp/
0145nobodyさん
03/07/02 11:29ID:UDPPCCYrFORM間違いの116です。
また、基本的なことで申し訳ありません。
> 0-9a-zA-Z以外のものが入るのなら、変換しとけ。
0-9a-zA-Z は変換する必要なしという事は、これらの文字を
バイナリで表現すれは、どのコード体系でも同じなのですか?
またCGIへの受け渡し文字列中に、「&」や「=」がよく使われますが
これらが含まれていれば変換する必要があるのでしょうか?
まあ、どんな場合でも変換しておけば問題ないのでしょうけど
実際のところが気になったのと、自分自身ではsjisでしか
試す事ができないので、ここでお聞きするしかありません
でした(^_^;)
0146あぼーん
NGNG0147nobodyさん
03/07/02 11:48ID:???1byte文字は文字コード関係ない
urlエンコードについては
http://techtips.belution.com/ja/perl/0000/
0148nobodyさん
03/07/02 11:59ID:???1byte文字でも文字コードは色々種類あるぞ。
よく使われるもので、JIS X 0201 Latinとか、JIS X 0201 Latin
とか、純粋なASCIIとかEBCDICとかあるわけだが。
ISO-646を含めると相当な種類があるわけだが。
まぁ殆どの環境で、JIS X 0201系とASCII系は同じ表示になって
しまうしEBCDICのパソコンなんてほとんど持ってる人がいないから
誰もあんまり気にしてないだけだと思うが。
でも例えば、\100-なんてのは、1byte文字だけど文字コードによっては
バックスラッシュになっちゃう場合もあるわけだが。
(今書いてる文章はShift_JISなので、円記号として使って問題ない)
0149nobodyさん
03/07/02 16:02ID:???どこのレス(スレ)かわからなくなってしまったので、要約して再質問させていただきます。
housemaster.csv から、各行を読み込んで、条件に合致するなら、
その行の文字を表示させるというありがちなものを組んでます。
で、どうしても一部分の行(レコード)のみ、全て文字化けしてしまいます。
なお、検索条件によらず、文字化けする行は、必ず決まってます。(ID1とID24の行、というように)
回答では、「条件」のなかで文字コード関係の処理をしてまちがえてるのでは?
というのがありましたが、条件の中では数字の比較しかしてません。
また、別の回答では、jcodeを自動判別でなくeuc2sjisのようにしたら?
というのがありましたが、これは、全てそのようにしましたが、改善されずです。
他に、どんな理由が考えられるのでしょうか・・・?
0150nobodyさん
03/07/02 16:29ID:???どうやって検索させてるかしらんが念のため確認。
元データ(〜csv)を読み込む際と、検索条件(キーワード?)の
両方ともjcodeは使ってるよな?
どっちか一方だけとかじゃなくて。
0151nobodyさん
03/07/02 16:36ID:???元質問は見てないが、スクリプトやCSVの文字コードが異なっていて
適切に変換されていないとかは?
あるいはCSVデータの中身に問題があるとか。
SJISでそのまま扱うと文字化け起こす文字とかは対策してる?
0152149
03/07/02 16:38ID:???ありがとうございます。
●元データ(〜csv)を読み込む際・・・&jcode::sjis2euc(\$value); してます。
●検索条件(キーワード?)の・・・検索条件といっても、文字でひっかけてるわけでなく、
idや数値の大小(値段ですが)で検索してるだけなので、
jcodeは1回も使ってませんが、ここんとこは問題ないですよねえ・・・・・
0153149
03/07/02 16:40ID:???ありがとうございます。
肝心なこと言い忘れてました。
CSVはすべてSJIS(CSVから読み出すときは&jcode::sjis2euc(\$value);)
スクリプトのコードは全てEUC、
HTMLに出力時は全てSJIS&jcode::euc2sjis(\$value);に変換してます。
0154149
03/07/02 16:43ID:???CSVデータが壊れている?のではと思ったのですが、
秀丸で開いてみたところ、問題はなさそうでした。
あるいは、秀丸で見ても見ることのできない特殊なコード?が紛れ込んでいると
いうことはあるのでしょうか?
もしそうだとしたら、そういった特殊なコードはどうやれば見ることができるのでしょうか
0155nobodyさん
03/07/02 16:44ID:???んじゃとりあえず、CVSを読み込んで、ただ出力するスクリプト書いて、
出力結果を確認してくだちい。
そこで問題がなければ、読み込みには成功してると。
で、あとは順次スクリプト内に、ちょこちょこprintを入れて、
どこで文字化けをしたかチェック。
文字化けした近辺を洗うとよろし。
もしCVSでこけてたら、CVSの文字コードとか、そこら辺をあさるよろし。
あとよくわからんが、半角カナとか使ってると危なそう。
注意されたし。
0157nobodyさん
03/07/02 16:45ID:???バイナリエディタ
> HTMLに出力時は全てSJIS&jcode::euc2sjis(\$value);に変換してます。
eucでなぜ吐かない?
0158155
03/07/02 16:46ID:???>んじゃとりあえず、CVSを読み込んで、ただ出力するスクリプト書いて、
>出力結果を確認してくだちい。
当然、今動かしてるスクリプトと同じ方法で処理して出力してね。
(jcodeとか使ってるなら、全く同じような処理で)
0159149
03/07/02 17:33ID:???以下のスクリプトで、正常にSJISではきだされました・・・
ちょこちょこprintを入れて、ためしてみたいとおもいます・・・
open(IN, "< ./housemaster.csv") or die("cannot open:$!"); # 読みのみモードで開く
while ($line = <IN>){
#Perlメモ様様
$line .= <IN> while ($line =~ tr/"// % 2 and !eof(IN));
$line =~ s/(?:\x0D\x0A|[\x0D\x0A])?$/,/;
@values = map {/^"(.*)"$/s ? scalar($_ = $1, s/""/"/g, $_) : $_}
($line =~ /("[^"]*(?:""[^"]*)*"|[^,]*),/g);
#必要なものだけをEUCにして、出力時にSJISにする
foreach $value (@values){
&jcode::sjis2euc(\$value);
}
#必要なものだけをEUCにして、出力時にSJISにする
foreach $value (@values){
&jcode::euc2sjis(\$value);
}
#Perlメモ様様
$line = join ',', map {(s/"/""/g or /[\r\n,]/) ? qq("$_") : $_} @values;
print qq|$line a\n|;
}
close IN;
0160149
03/07/02 17:35ID:???「スクリプト内はすべてEUCで通して、入出力のみSJISに変換」
というポリシーだと大丈夫だと聞いたことがあるのですが、
違います?
0161149
03/07/02 17:36ID:???あ、バイナリエディタ・・・使ったことないけど試してみます。
>eucでなぜ吐かない?
個人的にはそうしたいんですけどね・・・
サイト内の静的ページがみなSJISなので、CGIのページだけEUCというのも、
なんか変かなと。。。
0163149
03/07/02 18:15ID:???for ($i=0;$i<=$#houselist;$i++){
foreach $key (keys %{$houselist[$i]}){
&jcode::euc2sjis(\$houselist[$i]->{$key});
}
}
としなくちゃいけないのを、
for ($i<=0;$i<=$#houselist;$i++){ のように、「$i<=0」
となってました。。。
変なfor文ならエラーにしてくれればいいのに・・・
ともかく、お騒がせしてすみませんでした。
0165155
03/07/02 18:18ID:???(俺もついさっきまで、連想配列のnameを間違っていて「動かねえ!」と
騒いでいたのは内緒)
こまめなチェックを心がけませう。
(人の事いえないけどネー)
ガンガレー
0166149
03/07/02 19:20ID:???いやいやほんとすんませんです。
なにげに、Perlを仕事としてやりはじめてまだ3ヶ月なもので、学ぶこと多いです。
(つーか、この部署プログラマ他にいないもんで、2chで質問してしまいましたw)
おたがいがんがりましょう
0168nobodyさん
03/07/02 21:03ID:???0169nobodyさん
03/07/02 21:05ID:???0172nobodyさん
03/07/02 22:54ID:???0173nobodyさん
03/07/02 23:23ID:???0174nobodyさん
03/07/03 00:06ID:???■ このスレッドは過去ログ倉庫に格納されています