Perl初心者スレ(マジレス回答)

1デフォルトの名無しさん2012/10/07(日) 00:48:39.00
どうぞー

357デフォルトの名無しさん2015/03/13(金) 20:55:35.08ID:hJWhu2F/
なにこの良スレ

358デフォルトの名無しさん2015/03/28(土) 10:06:58.72ID:spJK+jxH
my $tmp = {
$a => sub { $_ = 処理A},
$b => sub { $_ = 処理B},
$c => sub { $_ = 処理C},
};

ループ中に↑のように書いている場合、一つの変数に対して複数の処理($a に 処理A' を追加)を
加えたい場合、どのように書くのでしょうか?

359デフォルトの名無しさん2015/03/30(月) 16:12:56.05ID:4W43OXe7
;

360デフォルトの名無しさん2015/04/12(日) 18:06:38.92ID:eedq/AcT
凄い初歩的な質問だと思うのですが真剣に行き詰まってます
教えてください

_HOGE_

こんな表記の変数ってなんて表現するんですか?
またネットでこういう変数について調べたいときは、
どのように検索したらヒットしますでしょうか。

Perl __
で検索しても全然それらしい記事が発見できず

361デフォルトの名無しさん2015/04/12(日) 18:43:51.80ID:Xaz/Qvpp
_HOGE_は変数じゃないからヒットしないのが正解

もしかして:ヒアドキュメント

362デフォルトの名無しさん2015/04/12(日) 20:02:52.86ID:eedq/AcT
なるほど・・・独自のプログラム記述なんでしょうかね・・・

Perlの変数記述方法じゃないことがわかって少し安心しました
もう一回解析してきます

363デフォルトの名無しさん2015/04/12(日) 20:06:31.76ID:eedq/AcT
>>361さんの回答で先入観が排除され、
意味がわかりました。

$mes =~ s/_HOGE_/$name/g;

文字列に埋め込まれた_HOGE_を別の変数に代入されてる文字列と置換させていました。
ありがとうございました。

364デフォルトの名無しさん2015/04/13(月) 07:38:14.33ID:bJ3+bESR
__END__
とかそんなのの仲間じゃなくて?

365デフォルトの名無しさん2015/05/14(木) 07:11:03.21ID:y4MWBEfC
なんでも受け付けるからって、
__HOGE__ をヒアドキュメントとして使ってる人は、単に
特殊リテラルを理解してない人。

質問に超絶遅レスするなら、
__HOGE__は、ほんとうに HOGE と書かれていたなら、
特殊リテラルのまねっこ。
DATA, END などなら、perldoc.jp で perldata から「特殊なリテラル」の項を
参照すること。

366デフォルトの名無しさん2015/05/15(金) 01:58:16.40ID:3U2TIRvt
>>365
どういうこと?

367デフォルトの名無しさん2015/05/15(金) 02:39:32.50ID:PxFVj8Xw
ヒアドキュメントのデリミタを
print <<die;
dieなんてしないよ
die

ってしたら混乱するでしょ。それと同じレベルで特殊リテラルの
記載に類似(もしくはそのまま)させて使ったら、あかんでしょ。

print <<__END__;
dieなんてしないよ
__END__

って主旨?

368デフォルトの名無しさん2015/05/17(日) 23:46:03.51ID:wdkXHT83
絶対にありえない単語を区切りにしないと、区切りとしての役目にならんだろが
__END__を区切りにしてしまったら、__END__という単語が使えなくなるだろ

369デフォルトの名無しさん2015/05/18(月) 00:16:17.74ID:4BIqDTjB
じゃあ __HOGE__ にするわ。絶対ありえん単語だし。

370デフォルトの名無しさん2015/05/18(月) 00:56:57.87ID:sNwS2iXa
>>368
実行してみろよ、動くぞ。

use strict ;
use warnings ;
while(<DATA>){
print ;
}

print <<__DATA__;
これがヒア
__DATA__

__DATA__
特殊リテラル

371デフォルトの名無しさん2015/05/28(木) 16:11:25.87ID:lXL23oHs
ID.パス付きのHPの更新通知プログラムをつくり実行したところ (certificate verify failed)とハマりました。

おそらくSSL関係でつまっています。
簡単に教えてくれる方お願いします。

$mech->get('https://*****');
↑指摘されたラインです

SSLかと思うのですが、SSLについて知識があまりないため、
ダメだった理由をわかりやすく教えていただけませんか?


あと、ユーザーIDやパスワードの前にpitgetを書いてあると
どうなるのでしょうか?

説明下手でごめんなさい。

372デフォルトの名無しさん2015/06/08(月) 21:35:22.93ID:fDJEyEgd
特定のディレクトリ(test)からファイルを読み込む処理を
実装しようと思っています。

while(<./test/*>){
  #〜ファイル読み込み処理
}
はOKなのに

$hoge = "./test/*";
while(<$hoge>){
  #〜ファイル読み込み処理
}
がうまくいかない理由はなぜなのでしょうか?
$hogeを可変にしたいのですがどうすればよいでしょうか?
突然の質問で申し訳ありませんが、宜しくお願いします。

373デフォルトの名無しさん2015/06/08(月) 22:51:09.28ID:tIKF3SUY
$hoge = "./test/*";
これは文字だからです。(演算子に対するアドレス(ポインタ)ではありません)。

$hoge = "test";
while(<./$hoge/*>)

374デフォルトの名無しさん2015/06/08(月) 23:05:32.65ID:fDJEyEgd
>>373
出来ました!ありがとうございます
今日かなり悩んでいました
おかげ様でスッキリしました

375デフォルトの名無しさん2015/08/31(月) 00:47:28.38ID:xgd4PpfH
下のようにリストのリストを作成したいがcpanか何かで実現できないでしょうか?
> (list (list 1 2) (list 3 4))
((1 2) (3 4))
> (first (list (list 1 2) (list 3 4)))
(1 2)
> (second (list (list 1 2) (list 3 4)))
(3 4)


my @car = (1, 2);
my @cdr = (3, 4);
my @both = (@car, @cdr);

print "\@car is @car\n"; # -> @car is 1 2
print "\@cdr is @cdr\n"; # -> @cdr is 3 4
print "\@both is @both\n";# -> @both is 1 2 3 4

printf "%s\n" , $both[0]; # -> 1
printf "%s\n" , $both[1]; # -> 2
printf "%s\n" , $both[2]; # -> 3
printf "%s\n" , $both[3]; # -> 4

376デフォルトの名無しさん2015/08/31(月) 13:20:01.08ID:Q0xjlAqa
Lisper な人?
多分、こういうことをお望みかな。

#!/usr/bin/perl

use Data::Dumper;

my @car = (1, 2);
my @cdr = (3, 4);
my @both = ( \@car, \@cdr);
print( Dumper( \@both));

377デフォルトの名無しさん2015/08/31(月) 13:31:30.24ID:Q0xjlAqa
ごめん、アクセス方法も書かなきゃね。

#!/usr/bin/perl

my @car = (1, 2);
my @cdr = (3, 4);
my @both = ( \@car, \@cdr);
print("$both[0]->[0]\n");
print("$both[0]->[1]\n");
print("$both[1]->[0]\n");
print("$both[1]->[1]\n");

378デフォルトの名無しさん2015/08/31(月) 18:13:02.76ID:zR+vvNwg
>>377
ありがとう perlのリファレンス表記がこの機会に少し分かりました

my @car = (1, 2);
my @cdr = (3, 4);
my @both = ( \@car, \@cdr);
print("$both[0]->[0]\n");
print("$both[0]->[1]\n");
print("$both[1]->[0]\n");
print("$both[1]->[1]\n");
print("@{$both[0]}\n");
print("@{$both[1]}\n");

379デフォルトの名無しさん2016/01/10(日) 13:19:49.57ID:/ndDSiBm
971 名前:名無しさん@七周年[] 投稿日:2006/11/11(土) 00:56:10 ID:M8+ahUZV0
自称スーパープログラマー某

強烈加齢臭
メール見ない メール無視
ドキュメント見ない ドキュメント無視
説明聞かない 説明無視
話聞かない 話無視
ガム→むっちゃー むっちゃー むっちゃー むっちゃー
煎餅→バリバリバリバリバリバリ
菓子パン→モグモグモグモグモグモグモグモグモグモグ
カップアイス→むっちゃー むっちゃー ペロペロペロペロ

フロアすべてに響き渡る 超ばかでかいくしゃみ 当然手でおさえない

異音と異振動
ドスーン!ドスーン! ドカーン!ドカーン! バコーン!バコーン! ズドン!ズドン!
机が近いとマウスポインターが飛ぶ 誤操作誘発
書類だしたりしまうだけでドカンドカン

30秒ごとに口と鼻から異音
ふんっっ!    ふんっっ!   

備品破壊 貸与P C 破壊 他人のもの破壊

奴の作ったスクリプトとプログラムは使えない バグ製造機

電話や共有携帯電話 キーボードが油ベタベタ
奴に電話とPCとコンソールは触らせてはいけない

380デフォルトの名無しさん2016/11/02(水) 10:11:38.85ID:+6JfDybA
HTMLファイルの特定文字列を大文字から小文字へ置き換えたいです。
具体的には、name=

3813802016/11/02(水) 10:15:17.18ID:+6JfDybA
あれ、途切れちゃったのでダブルクォートでおかしくなったので、無しで書きます。
HTMLファイルの特定文字列を大文字から小文字へ置き換えたいです。
具体的には、name=A10AB を name=a10ab とnameの部分のみ置き換えたいです。

382デフォルトの名無しさん2016/11/03(木) 19:06:36.96ID:OIFmvywo
s{ name=" ([^"]+) " }{ 'name="' . lc($1) . '"' }egx

3833802016/11/03(木) 23:22:08.51ID:k7tVkirO
>>382
eで関数を使えるんですね。ありがとうございました。

384デフォルトの名無しさん2016/11/20(日) 01:09:58.42ID:VOEYuZOA
perl コマンドラインからモジュールを読み込みたいんですが、
perl -mM Win32::Clipboard -e ""
だと
Can't open perl script "Win32::Clipboard": Invalid argument
と怒られます。

Perl64\lib\Win32\Clipboard.pm
は存在しているのですが・・・

385デフォルトの名無しさん2016/11/20(日) 11:39:42.73ID:fMzPWX9X
なんで -m と -M 重ねてるの?それと隙間開けずにやってみ
-MWin32::Clipboard
  ↑

386デフォルトの名無しさん2016/11/20(日) 11:42:40.54ID:fMzPWX9X
perl -mM Win32::Clipboard
だと M.pm を読み込んだ後 Win32::Clipboard という名のファイルをperlスクリプトとして実行しようとしてるっぽい

387デフォルトの名無しさん2016/11/20(日) 19:04:30.90ID:VOEYuZOA
>>385
できました。
ありがとうございました。

388デフォルトの名無しさん2016/11/20(日) 21:00:33.25ID:pMz2tkuX
どうでもいいけど、質問の回答に「なんで○○なの」と質問で返すのはみっともない
わからないから質問してるのにね
ここは初心者スレだし
よっぽど回答に自信が無いように見える

389デフォルトの名無しさん2016/11/20(日) 21:01:48.41ID:pMz2tkuX
なんで?
なんで?
なんで?
ことあるごとに、「なんで」っていうヤツ
バカっぽい
イライラする
ムカツク

390デフォルトの名無しさん2016/11/23(水) 04:06:43.88ID:eJb9MXJH
>>389
「なんで」を追求する楽しさがわからないの?

391デフォルトの名無しさん2016/11/23(水) 10:50:03.05ID:I/SlW2fg
質問を質問でかえすやついるよな
俺「なぜ変更したんですか?」
先輩「なぜ、その変更に疑問を抱くの?」

・・・

392デフォルトの名無しさん2016/11/23(水) 11:10:48.33ID:NGAFtogl
文脈にもよるわな
マニュアルにはっきり書いてあるようなことと違うことやっているなら「お前ちゃんと読んでないのか?」ってなるし
どう説明したら理解できるのか探るためにどう考えてどこに疑問を持ったのか確認することもあるし

そういう文脈を無視して 質問したら質問が返ってきた = おかしい は短絡的だね

393デフォルトの名無しさん2016/11/23(水) 11:32:41.80ID:I/SlW2fg
>>392
めんどくさい人って思われてるよw
誰もあんなに聞きにこなくね?

394デフォルトの名無しさん2016/11/24(木) 21:29:28.37ID:Puznaqkq
perlの本を読んでいると、よく
「スカラーコンテキストでは〜」とか「リストコンテキストでは〜」とありますが
どのようなところで、分かるのでしょうか?

$a = grep /d/ ,qw<ab cd def>;
なんかgrepがスカラーコンテキストで使われていると思うんですが

if(grep /d/ ,qw<ab cd def>){}
だとなぜスカラーコンテキストだと分かるのでしょうか?

395デフォルトの名無しさん2016/11/24(木) 21:43:25.96ID:ws/Ij8QD
真偽値だからスカラーコンテキスト

396デフォルトの名無しさん2016/11/24(木) 22:50:56.11ID:Puznaqkq
ありがとうございます
理解できました。

397デフォルトの名無しさん2016/11/28(月) 20:34:11.39ID:5mxcw3wW
shiftjisのファイルを読み込むと「{」が「本」にマッチしちゃうんですがいい方法ありませんか?

398デフォルトの名無しさん2016/11/29(火) 00:14:31.38ID:y3Pzho4d
基本全部utf8で処理する

399デフォルトの名無しさん2016/11/29(火) 00:38:56.85ID:p0rBFEu6
ファイルを読み込むときにperlに文字コードを教えてあげるとバイト単位ではなくて文字単位で認識してもらえるようになる
open my $fh, '<:encoding(cp932)', $file or die $!;

正規表現を含むソースコード全体をUTF8で書き、スコープの上の方で use utf8; と宣言すればスコープ内のコードも文字単位で認識されるようになる

400デフォルトの名無しさん2016/11/29(火) 08:02:41.28ID:lSOeahl6
>>399
レスありがとうございます。
試してみます。
取り急ぎお礼まで。

401デフォルトの名無しさん2017/02/26(日) 22:46:53.99ID:UaR+28E8
以下エラーが出たため、ググると、似たエラーのQ and Aがありました。
Q and A では "if(defined(%hash))"を"if(%hash)"にしろと読めたので、倣うと確かにエラーは解消されました。
理屈はまるで分からないのですが、%記号のついた変数のときだけdefinedを削る理由は何なのでしょうか。

エラー: Can't use 'defined(%hash)' (Maybe you should just omit the defined()?) at ./w3mhelp.cgi line 51.
Q and A: https://github.com/bioconda/bioconda-recipes/issues/1254

402デフォルトの名無しさん2017/02/26(日) 23:46:32.86ID:03Ms8vp8
>>401
すごく古い Perl (例えば 5.005_03) だと、defined %hash はエラーにならず 0 か 1 が返ってきていた。
だが今やこの機能は廃止された。

http://perldoc.jp/func/defined
> 集合(ハッシュや配列)への defined の使用は非推奨です。
> これはその集合にメモリが割り当てられたかを報告するのに用いられていました。
> この振る舞いは将来のバージョンの Perl では消滅するかもしれません。

ハッシュ変数自体をスカラーコンテキストで評価すると「利用バケット数/確保バケット数」のような値が
返ってきて、これは昔から変わらない。内容が完全に未定義 = キーが一つも無ければ 0 が返される。
よって if (%hash) { ... } は、意味や挙動的には if (keys %hash) { ... } と同じ。

my %hash;
printf "%s, %d\n", scalar %hash, scalar keys %hash; # 0, 0
$hash{udnef} = undef;
printf "%s, %d\n", scalar %hash, scalar keys %hash; # 1/8, 1
%hash = ();
printf "%s, %d\n", scalar %hash, scalar keys %hash; # 0, 0

http://d.hatena.ne.jp/yumatsumo/20071207/1197002522

403デフォルトの名無しさん2017/02/27(月) 00:03:03.35ID:JWhb7pSm
ttps://perldoc.jp/docs/perl/5.22.0/perl5220delta.pod#defined40-64array41-32and32defined40-37hash41-32are32now32fatal32errors
>defined(@array) と defined(%hash) は致命的エラーになりました
>これは v5.6.1 から廃止予定で、v5.16 から廃止予定警告が出力されていました。

v5.6.1は2001年、v5.16は2012年、実際に廃止されたv5.22は2015年にリリース

ttps://www.effectiveperlprogramming.com/2016/06/perl-v5-26-new-features/
>A hash is scalar context will return the number of keys, not the hash statistics.
今年リリース予定のv5.26からはスカラーコンテキストのハッシュが返す値はハッシュの持つキーの数になるそうです

404デフォルトの名無しさん2018/02/03(土) 21:51:51.42ID:UEj2CeXM
Perl初心者です。独学でやり始めましたが、わからないことがあり、先輩方、何卒よろしくお願いします。

my $num = 1;
my $inc = $num++;
print “$num¥n”;
print “$inc¥n”;

変数$numは2と表示されますが、変数$incは1と表示さます。こらは仕様でしょうか。変数$incについても2が表示されると思ってたのですが。
C言語では右辺を評価した後に左辺に代入して、2が表示してたかな、と思ったので質問させていただきます。

405デフォルトの名無しさん2018/02/03(土) 22:48:45.47ID:oNG+vmom
>>404
Cでも++演算子は同様の結果になると思ったが?

406デフォルトの名無しさん2018/02/03(土) 22:55:48.24ID:UEj2CeXM
>>405
本当ですね。もっと確認してから質問するべきでした。
やりたかったことは
$inc = ++$num(
でした。C言語と同じですね。

ご教授頂きまして、どうもありがとうございました。

407デフォルトの名無しさん2018/02/03(土) 22:57:16.17ID:UEj2CeXM
>>406

$inc = ++$num;

の間違いです。

新着レスの表示
レスを投稿する