如何在Mac OS X Mavericks上降级Perl

3
新发布的 Mavericks 已经从其代码库中删除了弃用模块"Switch.pm"。然而,我最近尝试构建AOSP源代码树时,它在某种程度上使用了这个模块来生成"make-hash-tools.pl"。
Mavericks 拥有Perl 5.16.2版本,而其前身 Mountain Lion 则拥有5.12.4版本。有没有办法降级我的 Perl?
编译错误看起来像这样:
  Can't locate Switch.pm in @INC (@INC contains: /Library/Perl/5.16/darwin-thread-\ 
  multi-2level /Library/Perl/5.16 /Network/Library/Perl/5.16/darwin-thread-multi-2level\
  /Network/Library/Perl/5.16 /Library/Perl/Updates/5.16.2\
  /System/Library/Perl/5.16/darwin-thread-multi-2level /System/Library/Perl/5.16\
  /System/Library/Perl/Extras/5.16/darwin-thread-multi-2level \
  /System/Library/Perl/Extras/5.16 .) at external/webkit/Source/WebCore\
  /make-hash-tools.pl line 23.

谢谢!

3
您可以选择从CPAN安装Switch.pm。 - Slaven Rezic
1
降级系统 Perl 不是一个好主意。这将破坏依赖它的所有其他内容。就像 @SlavenRezic 所说,只需从 CPAN 安装 Switch。或者使用 perlbrew 构建本地 perl。 - friedo
我尝试使用CPANM安装Switch,但它说找不到Switch! - mopodafordeya
1
@FangBoy,请展示你使用的确切命令以及从失败的cpanm安装中获取的构建日志 - cpanm Switch 应该可以工作。 - amon
1
编辑您的问题,将输出包含在一个栏中而不是多个栏中。强制安装损坏的模块是一个坏主意,因为它很可能是无用的。有趣的是,我在Linux上使用perl 5.18.1也遇到了相同的测试失败(2-3),这表明该模块已经损坏。对我来说,最新的可安装版本是2.06。编辑:已经有很多的错误关于测试失败,我们不是第一个... ⇒移植您的代码 - amon
显示剩余3条评论
6个回答

5
你可以使用perlbrew在其自己的目录中安装一个并行版本的Perl,并带有它自己的模块。目前,它允许您安装Perl到5.003_07版本,尽管并非所有版本都得到Perl Porters的安全修复支持。
不过,从CPAN上安装Switch可能更简单。

你能给我提供一步一步的指令吗?我尝试使用CPAN,但它显示找不到Switch模块。谢谢。 - mopodafordeya
cpan Switch 安装成功了。 - Quentin
~$ cpan Switch 正在读取 '/Users/USER_NAME/.cpan/Metadata' 数据库生成于 2013年10月26日14:53:02 GMT 正在安装模块 'Switch' 无法创建目录 /Users/USER_NAME/.cpan/prefs - mopodafordeya

测试总结报告

t/given.t (Wstat: 0 Tests: 293 Failed: 2) 失败的测试:2-3 文件=3,测试=590,1秒钟(0.07用户0.01系统+0.40 cusr 0.02 csys = 0.50 CPU) 结果:失败 3个测试程序中有1个失败。590个子测试中有2个失败。 make: *** [test_dynamic] Error 255 RGARCIA/Switch-2.16.tar.gz /usr/local/bin/make test -- 不OK //提示//要查看安装此模块的cpan-testers结果,请尝试: 报告 RGARCIA/Switch-2.16.tar.gz 运行make install make test返回错误状态,不会强制安装
- mopodafordeya
我使用sudo cpan Switch安装cpan,然后运行cpan Switch,但是我收到了如上所示的测试摘要报告。为什么会在make install时失败? - mopodafordeya
显示剩余2条评论

3

看起来对我来说运行sudo cpanm Switch --force是有效的


2
你也可以使用这个:
$ sudo defaults write '/Library/Preferences/com.apple.versioner.perl' Version 5.12

它使得 Perl 运行版本 12 来处理大部分内容。不幸的是,对于 apache 并非如此...


1

在10.9.2上对我有用,没有“强制”。


cpan[2]> install Switch
Running install for module 'Switch'
Running make for C/CH/CHORNY/Switch-2.17.tar.gz
Fetching with LWP:

...一堆获取(fetch)相关的东西...

CPAN.pm: Building C/CH/CHORNY/Switch-2.17.tar.gz

Checking if your kit is complete...
Looks good
Writing Makefile for Switch
Writing MYMETA.yml and MYMETA.json

... 一堆Xcode许可证相关内容 ...

cp Switch.pm blib/lib/Switch.pm
Manifying blib/man3/Switch.3pm
  CHORNY/Switch-2.17.tar.gz
  /usr/bin/make -- OK
'YAML' not installed, will not store persistent state
Running make test
PERL_DL_NONLAZY=1 /usr/bin/perl "-MExtUtils::Command::MM" "-e" "test_harness(0, 'blib/lib', 'blib/arch')" t/*.t
t/given.t ... ok       
t/nested.t .. ok   
t/switch.t .. ok       
All tests successful.
Files=3, Tests=590,  0 wallclock secs ( 0.04 usr  0.01 sys +  0.22 cusr  0.01 csys =  0.28 CPU)
Result: PASS
  CHORNY/Switch-2.17.tar.gz
  /usr/bin/make test -- OK
Running make install
Installing /Library/Perl/5.16/Switch.pm
Installing /usr/local/share/man/man3/Switch.3pm
Appending installation info to /Library/Perl/Updates/5.16.2/darwin-thread-multi-2level/perllocal.pod
  CHORNY/Switch-2.17.tar.gz
  /usr/bin/make install  -- OK

我接着运行了之前出现了“在@INC中找不到Switch.pm”的错误的代码,结果代码可以正常运行。


0

我发现了另一个命令:

sudo cpan -f Switch

我不得不执行两次命令,但在Yosemite上对我有用。感谢blog


0

我发现这些命令是可行的。

sudo perl -MCPAN -e shell

cpan > force install Switch 

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接