1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

WSL2+Ubuntu-22.04でPerlを再履修している

Posted at

まえがき

 業務上でテキストデータ(Excelで保存したCSVファイル)を複数ファイル読み込んでデータ加工する必要性に迫られ、昔取った杵柄でPerlをもう一回やっている。
 Perlを書く、動かす上でハマったことをメモしておく。

動作環境

 Windows 10 Pro バージョン 22H2
 WSL2(Microsoft Store版、詳しいバージョンは下記のとおり)
 Ubuntu 22.04.01 LTS(Microsoft Storeより)

PS C:\Windows\system32> wsl --version
WSL バージョン: 1.0.3.0
カーネル バージョン: 5.15.79.1
WSLg バージョン: 1.0.47
MSRDC バージョン: 1.2.3575
Direct3D バージョン: 1.606.4
DXCore バージョン: 10.0.25131.1002-220531-1700.rs-onecore-base2-hyp
Windowsバージョン: 10.0.19045.2486

設定ごと

CPANでのプロキシー設定

 ざっくり説明すると、こんな感じ。

> o conf  # 設定値の確認
> o conf http_proxy  # http_proxy設定値の確認
> o conf http_proxy http://192.168.0.1:8080/  # http_proxy設定値の一時反映
> o conf commit  # 設定の永久反映

 プロキシーサーバーの利用にユーザーやパスワードが必要なら、設定値にproxy_userproxy_passなどありますよ、と。

Perlのモジュール追加方法

 cpanプログラムを使ったけれど、makeのところでずっこけるので、「Can't exec make No such file or directory [Fix] - Techglimpse」の記事を参考に、sudo apt-get -y install build-essentialなどとした。
 あとは、sudo cpanしてcpanプロンプト上でCPANの新しいのがあるぞみたいなメッセージがあったので、install CPANreload cpanしてCPANを最新化したのち、install Text::CSV_XSをしてモジュール追加できた。

PerlをPhpStormで書けるように

 「どうしても業務命令でPerlを使わざるを得ないあなたに送る、IDE(IntelliJ)でPerlを殴る方法。 | あそびば32」の記事を参考に、Perl::TidyPerl::Criticは入れておこうと思う。
 この2つのモジュールはシステム用というよりも個人用の認識なので、sudo使わずにcpanとしてそれぞれinstallしてみる。

 PhpStormにて、プラグインにPerlを追加した。
プラグインPerl

 言語&フレームワークのPerl5にて、WSL2越しのUbuntu-22.04にあるPerlインタプリタを指定しつつ、「Enable Perl::Critic annotations(should be installed)」をチェックし、「Perl::Tidy command line arguments」に-l 120としてみた。
言語&フレームワークのPerl5の設定

 とはいえ、PhpStormから直接Perlスクリプトを実行するのはできなさそうで、Windows Terminalで開いているUbuntu-22.04窓のbashで実行させてる。

そのほか、雑なテクニック類のメモ

コードの始め方

 ひとまずこんな感じ。

#!/usr/bin/perl
use utf8;
use strict;
use warnings;

 shbangを書いておくことで、Ubuntuコンソール上で直接「$ ./~~.pl」だけでスクリプト実行できるので便利。
 use utf8; でUTF-8を扱うのと、use strict;で文法チェック強化、use warnings;で警告表示。

標準出力にUTF-8エンコーディングを指定

 print で変数の中身を出力するときに「Wide character in print at ~」みたいな警告にならないように対策。

binmode(STDOUT, ":utf8");

 シェルスクリプトで他のコマンドとパイプでつなぐときは、STDINに対しても":utf8"しとくべきでしょうね。

ファイル入出力時の改行コード指定とエンコーディング指定

 ファイルにアクセスするときの open の書き方。 下記の例はファイル入力としてのもの。

open $FH, '<:crlf:encoding(utf8)', '~~.csv';

 :crlfで改行コードがCR+LFであることを指示し、:encoding(UTF-8)でエンコーディングがUTF-8であることを指示。
 Excelさんが出力するCSVファイルがCRLFで改行とするので仕方ない。
 :crlfの指定を忘れると、いくらchomp $line;としてもCRコードを省けない。

入出力のモード指定の別の方法として

 Perlモジュールの open - 入出力のためのデフォルトの PerlIO 層をセットするための perl プラグマ - perldoc.jp によるPerlIO層の変更指示の書き方もアリなようです。
 (試していないので例示は省略。)

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?