NEWBIE:所以今天我开始学习Perl的教程,并且一切正常,直到我 使用#。###;
有人可以解释一下省略该版本时Perl的默认值吗?
当我将的值使用5.30.0; 时,示例将运行。但是,如果我根本不指定该行,则根据main的位置和对sayit()的调用,会出现以下两个错误。
第一个错误,如果软件包为main;在文件顶部打个招呼:: sayit()...。
无法通过helloWorld.pl第7行的程序包“ hello :: sayit”(也许您忘记加载“ hello :: sayit”?)定位对象方法“ say”。
icon_definitions
第二个错误,如果软件包为main;在文件底部打个招呼:: sayit()...。
在“ say hello :: sayit”附近的helloWorld.pl第20行中找到了运算符所期望的裸字
from kivy.lang import Builder
from kivy.base import runTouchApp
runTouchApp(Builder.load_string("""
#:import md_icons kivymd.icon_definitions.md_icons
#:import rgba kivy.utils.get_color_from_hex
<TopBar@GridLayout>:
rows: 1
padding: dp(4)
size_hint_y: None
height: dp(48)
spacing: dp(10)
canvas.before:
Color:
rgba: rgba("#3F51B5")
Rectangle:
pos: self.pos
size: self.size
Button:
size_hint_x: None
width: self.height
text: u"{}".format(md_icons['home'])
font_name: 'data/materialdesignicons-webfont.ttf'
background_normal: ''
background_color: rgba("#3F51B5")
Label:
text: "Home"
size_hint_x: None
width: self.texture_size[0]
font_size: dp(16)
font_name: "data/Roboto-Medium.ttf"
GridLayout:
cols: 1
canvas.before:
Color:
rgba: rgba("#fafafc")
Rectangle:
size: self.size
TopBar:
"""))
答案 0 :(得分:6)
有人可以解释一下省略版本时Perl的默认值吗?
use VERSION;
具有三个用途:
VERSION
为5.10+时 启用功能,就好像已指定use feature ":VERSION";
。VERSION
为5.12+时 启用约束,就像指定了use strict;
一样。默认值为不执行任何版本检查,并且不启用任何features或strictures。
在这里,我解释了为什么您发布的摘要导致错误。
将say
添加到Perl时,向后兼容性阻止了它在默认情况下全局可用。它将有损坏的脚本和模块,这些脚本和模块具有名为say
的子。因此,在使用say
之前,必须采取措施。
say
使 use feature qw( say );
可用。
say
(及更高版本)使 use 5.10.0;
可用,因为这将为您启用say
功能(除其他外)。这就是use 5.30.0;
为您服务的原因。
或者,无需启用此功能即可使用CORE::say
代替say
。 (这需要5.12 +。)
$ perl -e'say "foo"'
String found where operator expected at -e line 1, near "say "foo""
(Do you need to predeclare say?)
syntax error at -e line 1, near "say "foo""
Execution of -e aborted due to compilation errors.
$ perl -e'use feature qw( say ); say "foo"'
foo
$ perl -e'use 5.10.0; say "foo"'
foo
$ perl -e'CORE::say "foo"'
foo
这是documented。