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

Perlコーディング初心者質問スレ Part 59

■ このスレッドは過去ログ倉庫に格納されています
0001nobodyさん2009/02/16(月) 11:42:29ID:gvPTpodw
Perlのコーディングで困ってる人のスレです。

【投稿する際の注意】
質問するときは内容をよく吟味してから投稿してください。
「コマンドの意味がわかんない」とかはマニュアル見ましょう。
回答者さんは何でも屋じゃありません。

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

最低でも1と3が無いと誰も答えられないよ。
良い回答は良い質問から。一緒に勉強しましょう。

お勧めサイトは >2 以降

前スレ http://pc11.2ch.net/test/read.cgi/php/1218030872/
0261nobodyさん2009/03/09(月) 01:46:15ID:???
>260
おっけー。

あと、既に知ってるかもしれないが
「ド・モルガンの法則」でぐぐってみると勉強になるかも
0262nobodyさん2009/03/09(月) 03:04:23ID:???
>>261
or と and でよく悩むんです。
ありがとうございました。
0263nobodyさん2009/03/09(月) 03:26:47ID:???
>>260
詳しくは、月刊ifの全て、第18号をお読みください
0264nobodyさん2009/03/09(月) 04:12:13ID:???
気付いたら *.cgiが 丸見えだ。(五七五
0265nobodyさん2009/03/09(月) 04:36:41ID:???
>>263
月刊ifの全て第18号には、こんな用例がのっているはずw

$hoge = 'c';

$hoge ne 'a' and $hoge ne 'b' and print "ok";
0266nobodyさん2009/03/09(月) 19:03:15ID:???
第24号より難しいことしてるよな、きっとw
0267nobodyさん2009/03/09(月) 23:14:05ID:???
サーバー上で一つのファイルを読んだり書いたり追記したりするCGIを作成して、
初めてflockを使ってみたのですが、実際にflockを間違えずに入れれてるかどうか
確認するにはどうすればいいでしょうか。
0268nobodyさん2009/03/10(火) 00:01:48ID:???
ab 使ってアタックしてみればいい

たとえば純粋にカウントアップするスクリプト書いて、
ab で 30 のクライアントで 10000 回もぶん回せば結果は出るかと思うよ
0269nobodyさん2009/03/10(火) 11:58:59ID:???
無料日がおしよせてくる、泣いてる場合じゃない
ワクワクを百倍にしてヤフオクの主役になろう♪
0270nobodyさん2009/03/10(火) 11:59:31ID:???
↑スレチ、まちごうたorz
0271nobodyさん2009/03/11(水) 22:07:23ID:???
>268
abってモジュールがあるのでしょうか?
ググッて見たけど、ソートの$a<=>$bとかばっかりひっかかってわかりませんでした。
0272 ◆TWARamEjuA 2009/03/11(水) 22:29:30ID:????BRZ(10001)
>>271
検索語にapacheも追加すると幸せになるかもしれません。
0273nobodyさん2009/03/11(水) 23:11:50ID:???
>>272
なるほど、apacheの方でしたか。
見つかりました。ありがとうございます。
0274nobodyさん2009/03/12(木) 16:37:21ID:???
月刊ifの全ての第14号と第15号を見て思ったんだけど
範囲演算子の「..」と「...」をスカラーコンテキストとして評価して
状態遷移処理をするプログラムを活用している人はいるのだろうか?
0275nobodyさん2009/03/12(木) 17:06:33ID:???
個人的には嫌と言うほど使ってるが? @data解析系
0276nobodyさん2009/03/12(木) 19:29:47ID:???
>>275
なるほど
試しに使ってみたけど論理が混乱して変数でフラグ持たせるやりかたで未だにやっているけど
実際に嫌と言うほど使っている人がいるってことは、俺がバカだったというだけみたいだな出直してきます
0277nobodyさん2009/03/14(土) 16:39:37ID:???
tokuhirom は、適度に漢字を混ぜた文章書いてくれないかな。
0278nobodyさん2009/03/14(土) 20:53:02ID:???
Mooseみたいに、useしただけでstrictとwarningsがuseされるモジュールを作りたいんですが、どうしたらいいですか?
ソースを参考に、こんなの書いたけど駄目でした。

package Hoge;
use strict;
use warnings;

sub import {
 strict->import;
 warnings->import;
}

package main;
use Hoge;

$hoge=1; # ここでエラーになって欲しい
0279nobodyさん2009/03/14(土) 21:37:49ID:???
>>278
やってみたけど普通にそれで引っかかるぞ?
0280nobodyさん2009/03/14(土) 22:00:06ID:???
>>279
あれ本当だ…
何かを間違っていたようです、失礼しますた
0281nobodyさん2009/03/16(月) 00:10:49ID:???
Windows + ActivePerl 5.8.8 + Mysql5.0で
フレームワークにTripletailを使いたいのですが、
どうやっても
DBI connect('test:localhost','user',...) failed: Can't create TCP/IP socket (10106) at C:/Perl/site/lib/Tripletail/DB.pm line 1102と
エラーが出てしまって…
コードはiniのDB設定以外Tripletailのチュートリアルにあるものそのままだし
DBのユーザー名やパス等も間違いないと思うのですが。

誰かTripletail使ってる人いませんか?
0282nobodyさん2009/03/16(月) 13:27:07ID:???
>>281
デバッグしろよ!!
0283nobodyさん2009/03/23(月) 00:31:29ID:???
tokuhirom は能力ないのかね。
多くの場面で使われているということだけでは、何も評価したことにならんよ。

「あれがいいってみんなが言ってるよ。」
0284nobodyさん2009/03/23(月) 01:06:40ID:???
>>283
直接言えよ

Module::CoreListに載っていればいいのか、
Plaggerとかの有名どころで使われているモジュールがいいのか、
CPANに上がってりゃそれでいいのか、
場末のコードスニペットがいいのか、
判断どころは色々だろ
0285Nobodyさん2009/03/24(火) 02:30:18ID:???
yellowlemon 234
redapple 432235
redstrawberry 2934

こんな感じで文字列と数字で構成された行を数字の高い順(降順)
でソートして↓のようにするにはどのようにすればいいでしょうか?

redapple 432235
redstrawberry 2934
yellowlemon 234
0286nobodyさん2009/03/24(火) 04:35:51ID:???
>>285
http://www.kt.rim.or.jp/~kbk/perl-5.8/perlfaq4.html#how_do_i_sort_an_array_by__anything_

my @sorted = map "$_->[0]\n",
  sort { $b->[1] <=> $a->[1] }
  map [ $_, / ([0-9]+)/ ],
  ('yellowlemon 234', 'redapple 432235', 'redstrawberry 2934')
;
0287nobodyさん2009/03/24(火) 06:28:56ID:???
別バージョン

my @targets = ('yellowlemon 234', 'redapple 432235', 'redstrawberry 2934');
y @sorted_targets = sort {
(split ' ', $b)[1] <=> (split ' ', $a)[1];
} @targets;
0288nobodyさん2009/03/24(火) 16:58:27ID:???
>>287
> ソートするものの一部を取り出す必要があるような複雑な関数を使うのなら、
> ソート関数の内側でそれを使ってはいけません。最初にその関数で使う部分を
> 取り出します。なぜなら、sort のBLOCKは同じ要素に対して何度も何度も
> 呼び出される可能性があるからです。

sort() が比較要素をキャッシュしてくれるようにでもなっているのなら、
{ (split ' ', $b)[1] <=> (split ' ', $a)[1] } でいいけどね。
02892872009/03/24(火) 20:07:04ID:???
>>288
アドバイス、サンクス。
確かに考えてみたら、比較の度にsplitが実行されて287の方が遅そうな感じだな。
でも、気になってベンチ(ランダムに作った100要素の@targetsを各functionでソート。これを1000000回実行して結果取得)をとってみたら意外な結果だった。
287で書いたコードの方が455倍速いという結果に。。。
これってsplitの処理がたまたま、map=>sort=>mapのデータ渡しや正規表現処理より速いってこと???

Rate without_split_in_block with_split_in_block
without_split_in_block 3982/s -- -100% (286で書かれたcode)
with_split_in_block 1818182/s 45558% -- (287で書かれたcode)
0290nobodyさん2009/03/24(火) 22:20:58ID:iEyVm5it
ネットで拾ってきたperlスクリプトを使いたいんだが、
このまま実行してもできない。。
誰か教えてくれんか?perlの知識がまったくないのでわからんのです。
ちなみに環境はXPです。


while(<>){
s/<(\/)?([\w]+)/<$1\L$2/g; #要素タイプ名を小文字に
s/ (\w+)="/ \L$1="/g; #属性名を小文字に
#空要素タグを /> で閉じる
s/<(br|hr|img|link|input|col|base|meta|area|param)(.*?)>/<$1$2 \/>/g;
s/<a name="(.*?)"/<a name="$1" id="$1"/g; #id属性を加える
print;
}
0291nobodyさん2009/03/25(水) 04:28:21ID:???
>>290
ようはフィルタでしょ?
スクリプトをfoo.plとか適当な名前で保存して、
フィルタに掛けたいファイルを用意して(例えばbar.txt)
perl foo.pl bar.txt
すりゃいいだけかと
ファイルに吐かせたいなら
perl foo.pl bar.txt > out.txt
0292nobodyさん2009/03/25(水) 04:53:50ID:???
初心者です。環境はXP
CPANでモジュールをインストールしようとすると、
Alert: While trying to 'parse' YAML file
'C:\usr\cpan\FTPstats.yml'
with 'YAML::XS' the following error was encountered:
ってばかり吐かれて死にそう。
ググったらFTPstats.ymlを削除すればとあってやってみたけど効果なし。
何か策があれば教えてください。
0293nobodyさん2009/03/25(水) 08:15:32ID:???
>>289
ベンチコードが分からんと追試しようが無い。
http://boobar.hp.infoseek.co.jp/bench/sort.txt
02942872009/03/25(水) 10:10:31ID:???
>>293
わざわざサンクス。
293のコードで俺の環境でやってみた結果。V
GRT: 6 wallclock secs ( 5.00 usr + 0.00 sys = 5.00 CPU) @ 2713378.60/s (n=13566893)
ST: 6 wallclock secs ( 5.27 usr + 0.00 sys = 5.27 CPU) @ 2560283.68/s (n=13492695)
split: 4 wallclock secs ( 5.08 usr + 0.00 sys = 5.08 CPU) @ 2935626.97/s (n=14912985)

テスト環境:(perl) v5.10.0 (OS) Ubuntu desktop 8.10 32bit (CPU) Core2Quad Q9650 (メモリ) DDR2-6400 2GBx2

で次のレスが、289で使用したコードV
02952872009/03/25(水) 10:12:20ID:???
use strict;
use Benchmark qw(cmpthese);
use String::Random;

my @targets;
for (0 .. 100) {
push @targets, get_a_line();
}

cmpthese(1_000_000, { with_split_in_block => sub { with_split(@targets) },
without_split_in_block => sub { without_split(@targets) }, });

sub with_split { return sort { (split ' ', $b)[1] <=> (split ' ', $a)[1]; } @_; }

sub without_split {
return map "$_->[0]",
sort { $b->[1] <=> $a->[1] }
map [ $_, / ([0-9]+)/ ], @_;
}

sub get_a_line {
my $string_random = new String::Random();
$string_random->{'A'} = ['a'..'z'];
my $label = $string_random->randpattern('AAAAAAA');
$string_random->{'N'} = [0..9];
my $score = $string_random->randpattern('NNNNNNN');
return $label . q{ } . $score;
}
02962872009/03/25(水) 10:26:31ID:???
ごめん294の結果は間違ってた。引数渡すのわすれてた。
ARGV[0] = 1000
Benchmark: running GRT, ST, split for at least 5 CPU seconds...
GRT: 5 wallclock secs ( 5.32 usr + 0.00 sys = 5.32 CPU) @ 339.85/s (n=1808)
ST: 6 wallclock secs ( 5.29 usr + 0.00 sys = 5.29 CPU) @ 269.19/s (n=1424)
split: 5 wallclock secs ( 5.14 usr + 0.00 sys = 5.14 CPU) @ 90.86/s (n=467)
02972872009/03/25(水) 11:00:33ID:???
度々すんません。なんか、俺のbenchコードが間違ってるっぽいな。要素数かなり大きくしてためしてみたら体感的にもspli使わない方が速いわ。
0298nobodyさん2009/03/25(水) 22:28:41ID:V8wgPxlA
>>291
ありがとう!おかげで助かった。
0299nobodyさん2009/03/25(水) 22:41:59ID:???
perl勉強しようかと思うんだけど何から手を付けてよいものか…
0300nobodyさん2009/03/25(水) 23:19:39ID:???
>>299
>>2
0301nobodyさん2009/03/25(水) 23:22:54ID:???
>>300
何から手を付けてよいものか…
0302nobodyさん2009/03/26(木) 01:34:45ID:???
>>301
http://ja.wikipedia.org/wiki/Hello_world
まず画面上に "Hello, world!"、と表示することから始めるんだ。
0303nobodyさん2009/03/26(木) 11:24:01ID:???
シュワルツ変換までは知ってたがガトマン・ロスラー変換なんてのもあるのか
さっそくどこかで使ってやろう
0304nobodyさん2009/03/26(木) 12:07:44ID:???
へえ、勉強になったw
シャチ泳ぎの方が何かと好きだけど、覚えとこ。
実際にはそこまで処理時間にシビアな仕事はしてないけどw
0305nobodyさん2009/03/26(木) 14:19:19ID:???
っ「Sort::Maker」



0306nobodyさん2009/03/26(木) 15:38:08ID:???
初めまして。ご質問させていただきます。
AのサーバーにあるCGIから
BのサーバーにあるCGIへPOSTする方法を探しています。
HTMLのformタグのmethod=postと同じことをCGIで実行出来ないでしょうか?

0307nobodyさん2009/03/26(木) 15:49:55ID:???
LWP::UserAgentでPOSTリクエストを送信するとか
あるいはJavaScriptでブラウザにPOSTさせるとか
というのは嘘で、無理だから諦めろ
0308nobodyさん2009/03/26(木) 16:00:49ID:???
>>307
ご返答ありがとうございます。
よそのサーバーのCGIに処理を実行させるのは危ないなぁとも考えていましたが、無理でしたか。
同一のサーバーでしたら可能でしょうか?
0309nobodyさん2009/03/26(木) 17:29:37ID:???
action に http から書けば OK じゃない?
0310nobodyさん2009/03/26(木) 23:43:53ID:???
いや、おい・・・
0311nobodyさん2009/03/27(金) 00:10:05ID:???
>>308

普通にできるから
0312nobodyさん2009/03/27(金) 01:22:46ID:???
CPANのドキュメントくらいよめよ。
やり方書いてあるんだから。
0313nobodyさん2009/03/27(金) 07:22:34ID:???
初心者というかこれからPerlを始めようと思っている者です。

http://www.seshop.com/detail.asp?pid=6160
『10日でおぼえる Perl /CGI入門教室 第2版 』2005/9/5発売。
を購入しようと思っています。

この書籍が出た時点のバージョンのPerlをWindowz Vistaで
動かすことは可能でしょうか?バクがでたりエラーなどは大丈夫でしょうか?
これからPerlを勉強するので詳しいことはわかりません。

なお、PHP関連の書籍に付録で付いていたXAMPP1.6.5はインストール済みで
少なくともVistaで動作確認済みとPHPの書籍にありました。


どなたか回答よろしくお願いいたします。
0314nobodyさん2009/03/27(金) 08:24:05ID:???
>Windowz Vista

そんなのが出たのか。
0315nobodyさん2009/03/27(金) 09:14:42ID:???
その本が出た頃は5.8かな
VistaならActivePerl 5.8.8を入れておけば問題ない
03163132009/03/27(金) 09:29:04ID:???
>>315さん
ご回答ありがとうございます。
さっそくやってみます。
0317nobodyさん2009/03/27(金) 19:36:05ID:???
>>313
あと英数文字は半角で書く癖をつけないと動かないとおもう。
0318nobodyさん2009/03/27(金) 20:16:13ID:???
XAMPP はある程度分かっている人用の、設定がだりぃ人向けだから
ほんっとの初心者は Apache、PHP、MySQL それぞれを個別に入れれ
0319nobodyさん2009/03/27(金) 21:58:01ID:???
centos楽でいいよ
例のoverload絡みのバグへの対応は他ディストリより糞遅かったけど
0320nobodyさん2009/03/28(土) 00:42:44ID:mucWI58R
自分の環境はCentOS5 perl5.8.8です
ある文字列UTF-8を、指定の文字数で分割し、配列に格納したいと思います

例)UTF-8の文字列を5文字ずつ分けたいと思い↓のコードを書きました

$string = "民主党支持団体=jichiro,山口組、ブラクカイドウ、韓国民潭";
@output = $string =~ m/.{5/g;
print $_, "\n" foreach @output;

↑の結果は↓のようにしたいのですが、今のままだと途中で文字化けをしてしまいます
--------------
民主党支持
団体=ji
chiro
,山口組、
ブラクカ
イドウ、
韓国民潭
--------------

文字化けをしないようにする方法を教えてください
0321nobodyさん2009/03/28(土) 00:53:26ID:???
my $string = "民主党支持団体=jichiro,山口組、ブラクカイドウ、韓国民潭";
use Encode;
$string = decode('utf-8', $string);
my @output = $string =~ m/.{5}/g;
print encode('utf-8',$_), "\n" foreach @output;


% perl 2ch.pl
民主党支持
団体=ji
chiro
,山口組、
ブラクカイ
ドウ、韓国
0322nobodyさん2009/03/28(土) 01:03:13ID:???
>>320
use utf8;
を宣言して、スクリプトをutf8で保存すればよいのでは?
正規表現の{5の後に}が抜けている
さらに、{5}では、最後の5文字未満が拾えない
そこで
@output = $string =~ m/.{1,5}/g;
とすればok
0323nobodyさん2009/03/29(日) 14:40:26ID:???
Image::Magickで、PSD→JPGの変換を行っているんですが、
モノクロ2階調で描かれたpsdファイルを読み込んで保存すると
ぐちゃぐちゃに壊れたような画像になってしまいます。
上手く変換する方法は無いでしょうか。

 $image->Read("in.psd");
 $image->Write("out.jpg");

0324nobodyさん2009/03/29(日) 21:07:47ID:???
>>323

http://www.imagemagick.org/script/formats.php

とりあえず、最新バージョンは対応はしてみてるようだから、
perlじゃなくて、command lineからためしてみたら。
0325nobodyさん2009/03/29(日) 22:55:28ID:???
>>324
最新バージョンの 6.5.0-9 をDLして試してみましたが、
変わりませんでした。

ImageMagickの質問ってこのスレでいいんでしょうかね?
CG板とかUNIX板は違いそうだし。
0326nobodyさん2009/03/29(日) 23:40:56ID:???
>>325

ImageMagickはコマンドラインで提供されてるから、
perlをそもそも使わないで試したらってことです。

まず、psd,jpgサポートしてるか調べる

identify -list format

この辺ためす
http://www.imagemagick.org/script/command-line-tools.php

このへんで動くのに、perlだと動かない場合はここで良いいと思うけど、
そもそも動かない場合は、perl関係ない。
0327nobodyさん2009/03/30(月) 00:10:07ID:???
>>326
そもそも動きませんでした。
スレ違いなのでどこかに移動しようと思います。

・・・どこに移動するのがいいでしょうか?
0328nobodyさん2009/03/30(月) 11:49:19ID:???
かみ合ってねーなぁ。
software板にでも行きゃいいんじゃねえの。
0329nobodyさん2009/03/30(月) 19:04:34ID:???
ウィンドウズかMacでサーバ立てて、Photoshopのマクロ使った方がいいのでは。
0330nobodyさん2009/03/30(月) 20:35:52ID:???
誘導厨うぜーな。
0331nobodyさん2009/03/31(火) 16:12:44ID:???
DBIでSQLiteのテーブルを舐めて、レコードを更新したい。

sub TransGender {
 my $sth = $dbh->prepare('SELECT id, name, sex FROM Person;');
 $statusHandle->execute;
 while(my @row = $statusHandle->fetchrow_array) {
  my ($id, $name, $sex) = @row;
  $sex = ($sex eq 'male') ? 'female' : 'male';
  my $updh = $dbh->prepare('UPDATE Person WHERE id=? SET sex=?;');
  $updh->execute($id, $sex);
 }
}

以下の警告が出て更新出来なかった。
DBD::SQLite::st execute failed: database table is locked(1) at dbdimp.c

この場合まずIDを問い合わせて配列に格納し、
今度はIDから一つ一つデータを問い合わせて$sth->finish()した後に更新するの?
なんか定石みたいなのってありますかね。
0332nobodyさん2009/03/31(火) 16:35:28ID:???
>>331
同じく初心者の視点から思ったことを
この場合(全員が同時に性転換する場合)に限っては、sexテーブルを切り分ければ解決じゃないか?
あとSQL文最後のセミコロンは要らなかった記憶がある

excuteしたあとの動作うんぬんについては上級者に任せます
0333nobodyさん2009/03/31(火) 16:55:11ID:???
>>332
ごめん、コード例がまずかった。
後出しで申し訳ないけど、実際には全員が性転換するとは限りません。
舐めて逐一更新したいとき、どういう流れで作るべきなのかを聞きたかった。

prepareのセミコロンが要らないってのは了解。
0334nobodyさん2009/03/31(火) 17:17:50ID:???
>>334
なら
update person set sex='男' where sex='女' and...
update person set sex='女' where sex='男' and...
みたいに2つSQL文を発行すれば?
他に読み出してから行う処理がなくて済むなら速いと思う
0335nobodyさん2009/04/01(水) 11:55:36ID:???
いや、知りたいのはSQL文でどうにかする方法じゃなくて・・・
もういいです。ありがとうございました。
0336nobodyさん2009/04/01(水) 16:46:55ID:???
$word = 'チソポ';
$word2 = '検出文字';
print "Content-Type:text/html\n\n";
if($word2 =~ /$word/ig) {
print "out";
} else {
print "safe";
}

掲示板のスパム対策でうまく動かない部分があったので上のようなプログラムで試したところ、
実行すると「out」が出力されてしまいます。
「チソコ」だと「safe」が出力されます。

どうすればよいでしょうか?
03373362009/04/01(水) 17:08:31ID:???
すみません。
if($word2 =~ /\Q$word\E/) {
で解決しました。
0338nobodyさん2009/04/01(水) 20:37:02ID:+q6m3hR8
教えてください。

CatalystでDBIx::Class使って pagerやろうとしたのです

my $rs = $c->model(..)->search({}, {page =>1, rows=>10});
$c->stash->{data} = $rs;

.tt にて

[% SET pager = data.pager %]
[% INCLUDE pager.tt %]

で、data.pagerを参照するところで
Can't create pager for non-paged
と言われて困ってます。
どなたか助けて頂けませんか?
0339nobodyさん2009/04/01(水) 21:01:56ID:???
マルチ志ね
0340nobodyさん2009/04/02(木) 04:32:48ID:???
配列の添字が0で始まるとして、grepで1個の要素(TARGET)を返しているかチェックしたいのですが、
↓の書き方で問題ないでしょうか?

my @TARGET = grep (/hoge/, @hogehoge);
if ($#TARGET) {
 # エラー
}
0341nobodyさん2009/04/02(木) 05:02:24ID:???
>>340
そのコードなら、grepにヒットするのが1個もない時も動いちゃうよ。
1個の時のみなにかしたいなら、
 if( scalar(@TARGET)==1 )
とかにしたほうがよいんでない。?
0342nobodyさん2009/04/02(木) 05:20:44ID:???
>>341
ヒットするのが1個もないときの$#TARGETは-1になると思うんですが、どうでしょう?
$#TARGETが未定義値を返す場合があったりすると困りますが・・
0343nobodyさん2009/04/02(木) 05:21:49ID:???
ああ失敬。
0個or2個以上はエラーで、ってことなら
まあ>>340のままでも期待通りには動くか。
0344nobodyさん2009/04/02(木) 05:34:02ID:???
まあでもやっぱり、
自分が書くなら、

1個の時のみなにかしたい
→ if( scalar(@TARGET)==1 )

1個以外の時になにかしかい
→ unless( scalar(@TARGET)==1 )

みたいにするかな。
じゃないと、大分たって後から見直したり、
誰か他人に見てもらったりする時わかりにくじゃん。
0345nobodyさん2009/04/04(土) 18:14:39ID:???
ifの条件節で偽となるのは0かundefのときだけじゃなかったっけ?

普通に個数数えるべきだと思うが
0346nobodyさん2009/04/04(土) 20:48:24ID:???
>>345
http://search.cpan.org/dist/perl-5.10.0/pod/perlsyn.pod#Truth_and_Falsehood________
> The number 0, the strings '0' and '', the empty list (), and undef are all false in a boolean context.
0347クレクレコボラー2009/04/06(月) 21:20:03ID:IJNdmC5q
if $i !~ /[^\w]/

これは、変数iが何だったらって意味?
0348nobodyさん2009/04/06(月) 21:23:51ID:???
[a-zA-Z0-9_]以外の文字にマッチしなかったら
0349クレクレコボラー2009/04/06(月) 21:25:01ID:IJNdmC5q
ありがと
0350nobodyさん2009/04/06(月) 21:54:57ID:???
えーー
0351クレクレコボラー2009/04/06(月) 22:10:12ID:IJNdmC5q
うん、テストしたら逆のような気がするが。
0352クレクレコボラー2009/04/06(月) 22:13:51ID:IJNdmC5q
いや、いいのか。
i = a-zA-Z0-9_だったらって事だよね。
0353クレクレコボラー2009/04/06(月) 22:16:57ID:IJNdmC5q
COBOLもそうだけど、NOT=ってよく勘違しちゃうんだよね。
何年やっても。
俺が馬鹿なだけか。w
0354クレクレコボラー2009/04/06(月) 23:08:51ID:IJNdmC5q
今、アクセス解析のフリーソフトをいじってるんだけど、
この検索文字列「蜿悶j螟悶@」
「取り外し」と入力しているみたいなんだけど、文字化けしてしまう。

以下のようなソースを入れて、ほとんどがきちんとした文字に変換
されるんだけど、変換されないものもわずかにある。
(自分の名前も名字と名前の間にブランクを入れないと文字化けする。
名字と名前の間にブランクを入れると、なぜかきちんと変換される。)

use Encode;
use Encode::Guess qw/ euc-jp shiftjis 7bit-jis /;

$guess = Encode::Guess::guess_encoding($a2);
if (ref $guess && $guess->name ne 'shiftjis') {
Encode::from_to($a2, $guess->name, 'shiftjis');
}

elseのときに、どのようなソースを書けばいい?
全部きちんとした文字列に変換したいです。

つーか、仕事がないので自宅警備員やってるんだけど、COBOLの仕事
くれくれー。
0355nobodyさん2009/04/07(火) 00:12:40ID:???
[a-zA-Z0-9_]以外の文字にマッチしなかったらTRUE
0356クレクレコボラー2009/04/07(火) 01:58:46ID:YZyHfBtr
>>355
うん。それ理解出来たから。
それよりCOBOLの仕事探してんだけど。紹介してくれくれー。
出来なかったら
>>354の質問に答えてくれくれー。
0357nobodyさん2009/04/07(火) 10:01:01ID:???
>>354
いまどきはutf8のことも多いのでguessの候補に入れるといいと思うが、
utf8とeucは文字コードのよく使われる部分がもろに重なっているので
誤判定が多いのが悩みどころだな。eucは1文字2バイト、utf8は3バイト
なので6の倍数バイトでなければ区別がつくんだが、6の倍数バイトの
ときは辞書か出現確率テーブルでも用意してひくしかないんじゃない
かな。
0358nobodyさん2009/04/07(火) 21:56:59ID:???
utf8で日本語なら3byteだけどアルファベットだと1byteだから3の倍数とは限らないだろ
0359nobodyさん2009/04/07(火) 22:22:56ID:???
UTF-8 は固定長……、
そんなふうに考えていた時期が僕にもありました。二週間くらい。
0360nobodyさん2009/04/08(水) 18:43:51ID:???
http://www.itmedia.co.jp/news/articles/0904/08/news088.html
■ このスレッドは過去ログ倉庫に格納されています