Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/visual-studio-2008/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
 Perl_IT技术博客_编程技术问答 - 「Fatal编程技术网」

Perl有AND吗?

我宁愿这样做: say $shop->ShopperDueDate->andand->day_name(); 与此相比: say $shop->ShopperDueDate->day_name() if $shop->ShopperDueDate; 有什么想法吗 (这个想法的灵感来自Ruby扩展。) (实际上它的灵感来自Groovy语言,但大多数人并不知道;-) 更新:我认为maybe()和eval{}都是很好的解决方案。这不是ruby,所以我不能期望从左

什么';Perl中嵌套数据结构的简单参考或备忘?

什么是Perl中嵌套数据结构的简单参考或备忘单?也许最权威的参考是: 我同意,有一个简单的参考或备忘单会很好 (Perl data structures cookbook)末尾的示例可作为合理的快速参考。有助于理解这些嵌套结构 PERLDSC(1) User Contributed Perl Documentation PERLDSC(1) NAME perldsc - Perl Data Structures Cookbook DES

在Perl中执行多线程时,我应该查看哪些模块?

在Perl中执行多线程时,我应该查看哪些模块 我希望做一些性能相当低的事情;我希望线程能够同时运行多个工作线程,每个工作线程的睡眠时间各不相同。如果性能不是一个大问题,那么执行多个进程可能比处理线程容易得多。我经常使用它,它非常简单,但非常擅长它的功能。最新版本的Perl支持线程。运行perl-V:usethreads,查看它是否在您的系统中可用 $ perl -V:usethreads usethreads='define' 对如何使用它们进行了很好的介绍 听起来您不需要抢占式多线程;在这种

在Perl中,如何使用SSH密钥而不是密码来FTP文件?

我的本地系统和远程服务器配置了ssh密钥交换。 我想用NET::FTP包从远程系统获取XML文件。 您能推荐一种使用Net::FTP包但不使用密码进行文件传输的方法吗 我想你在找 你的服务器甚至支持ftp吗?可能是sftp?AFAIK FTP不支持公钥/私钥身份验证。SFTP是FTP的不同协议,几乎可以肯定这就是您的意思。 my $sftp = Net::SFTP->new( 'some_host_name', { user => 'your_user_name' } ); $sft

如何在Perl中获取雅虎实时股票报价?

有一种相当简单的方法可以检索雅虎15分钟的延迟报价!财务网站(“quotes.csv”API) 然而,到目前为止,我无法找到任何关于如何访问实时报价的信息 与实时报价相关的问题包括: 仅对登录用户可用 无API 不知道如何抓取这些信息——我有点相信它们是通过一些奇怪的Ajax调用放在页面上的 所以我想知道是否有人开发了一个公开的解决方案,从雅虎检索股票的实时报价!金融 注: 实现语言/框架需要灵活,但Perl或Excel是首选 假设安全性不是问题——我愿意提供yahoo用户ID和paswo

如何在Perl中转换UDP流?

我的Perl脚本得到一个UDP响应,该响应由2个整数+浮点数组成。问题是UDP流是一个很长的字节流 如何使用Perl将流强制转换为参数?您可以使用或 有关打包和解包的更多信息,请参阅 使用Convert::Binary::C,您可以传入一个C结构定义,然后可以轻松地从结构中提取数据成员。您可以粘贴一个示例吗?但你的答案可能在于。

Perl,在循环的内部使用变量,而在循环的外部使用变量?

这看起来很简单,但由于我是perl新手,所以很难理解。。我已经看过很多关于循环的文档了,我仍然被这个问题难住了。。。我有一个包含while循环的sub,我想在循环之外的循环中使用一个变量值(在循环运行之后),但是当我尝试打印出变量或从sub返回变量时,它不起作用,只有在从循环中打印变量时它才起作用。。如果你能告诉我我做错了什么,我将不胜感激 不工作(不打印$test): subtestthis{ $i=1; 而($i您在循环内声明变量test,因此它的作用域是循环,一旦您离开循环,变量就不再声明

我可以在Perl中将参数传递给sort的compare子例程吗?

我正在使用sort和我编写的自定义比较子程序: sub special_compare { # calc something using $a and $b # return value } my @sorted = sort special_compare @list; 我知道最好使用自动设置的$a和$b,但有时我希望我的特殊\u比较获得更多参数,即: sub special_compare { my ($a, $b, @more) = @_; # or maybe 'my @mor

perl中的Finger代码-无法执行

错误: 语法错误:意外出现文件结尾 下面是代码 我变了 "#!/usr/local/bin/perl" 实际的程序是 #!/local/perl5/bin/perl5.003 use Socket; $sockaddr = 'S n a4 x8'; $host = $ARGV[0]; $them = $host; $port = 79; print "Finger $host: \n"; $hostname = ``; `nslookup $host |grep Name: >&

在perl中读取文本块

我试图根据开始和结束字符串将一页文本分成块。我看到一篇关于如何做到这一点的帖子,但出于某种原因(可能是keybd和椅子之间出了问题),我没有收到任何返回的行 这是我迄今为止所做的: open INPUT, "in.file" || die "Can't find file\n"; open OUT, ">log.out" || die "Can't opne file\n"; $start="\/\*"; $stop= "\/\="; $found=0; while (<INP

Perl 5中的惰性评估技术示例?

我发现Haskell和Perl6最有趣的特性之一是能够将计算值推迟到实际需要时 另一方面,Perl5喜欢立即执行所有操作,但据我所知,它包含了惰性评估所需的所有原语。这些是: 在子例程中引用@将创建一个数组引用,该数组引用与参数列表中的标识符具有别名,即使其中一些标识符尚未包含值 从内部保存\@的子例程返回重载/绑定对象,然后在需要时取消引用。(还有各种各样的CPAN模块,可以抽象出连接/过载细节) 我一直在用Perl进行各种惰性编程技术的实验(我有一个模块正在工作,它在Perl5中实现了H

如何使用perl访问两个不同版本(8i和9)的Oracle数据库?

我目前正在使用perl模块DBI(1.613)和DBD::Oracle(1.26)访问Oracle数据库版本9i(9.2.0.8.0)。项目的当前范围现在要求我访问一个版本为8i(8.1.7.4.0)的Oracle数据库,根据,我只能使用DBD::Oracle版本1.20或更低版本访问第二个数据库 我知道我可以使用DBD版本1.20访问这两个数据库,但我想知道是否有可能安装两个版本的DBD模块,并为每个数据库使用可接受的版本(不太容易出错)。将不同版本的DBI/DBD::Oracle安装到两个不

如何在perl中迭代多级哈希

试试这个: id score 0 4 1 5 2 6 3 7 4 8 5 9 打印“id\t核心”; 对于($i=0;$i) 或者这里有一种不同的方法,我认为更容易: id score 0 4 1 5 2 6 3 7 4 8 my$app=“info”; 我的%记录; 对于(我的$i=0;$i$i,score=>$i+4}; } printf“id\t存储\n”; 对于我的$应用程序(键%records){ my@apprecord

shift-jis在perl中的解码/编码

当我尝试解码shift jis编码的字符串并将其重新编码时,一些字符会被乱码: 我有以下代码: use Encode qw(decode encode); $val=; print "\nbefore decoding: $val"; my $ustr = Encode::decode("shiftjis",$val); print "\nafter decoding: $ustr"; print "\nbefore encoding: $ustr"; $val = Encode::encode

Perl 如何在qx中使用文件?

我试图在Perl脚本的顶部指定一个常量,如下所示: use constant { # ... CONSTNAME => qx{readlink -e __FILE__} || __FILE__, # ... }; \uuuu文件\uuuu未在qx运算符内插值,这会导致此操作失败。如何实现我想要的,即在调用shell的readlink之前插入\uuu文件 请注意:不能将命令存储在中间变量中。要直接回答此问题,可以使用字符串中的插入任意表达式,如中所述: 评论中提出了几个警告:

如何在perl中去掉控制字符。。特别是[gs]?

我的代码如下 my $string = $cells[71]; print $string; 这将打印字符串,但在空格应该存在的位置有一个框,其中包含01 10。我用记事本++打开它,盒子变成了一个黑色的GS(我假设它是组分隔符) 我在网上看了看,上面说: s/[^[:print:]]+//g 但当我将字符串设置为: my $string =~s/[^[:print:]]+//g 我运行我得到的程序: 4294967295 我如何解决这个问题 我照霍布斯说的做了,成功了。。。谢谢:) 我

为什么我能';t覆盖Perl的内置打印?

随后, 我试图用我自己的文件覆盖打印: BEGIN {*CORE::GLOBAL::print = sub {print 1};} print 2; 但事实证明它不起作用,2仍然被打印,而不是1 为什么?因为它有非常特殊的解析规则,普通函数无法复制,所以不能重写print操作符 print "foo\n"; print { *STDOUT } "foo\n"; 您可以找到可以使用 PS-如果您的代码实际上覆盖了从到另一个问题的print,那么您将有一个无限循环: 无法覆盖以下关键字: cho

在哪里可以找到一个Perl模块,该模块在给定f值和自由度的情况下计算p值?

我正在寻找一个Perl软件包来计算给定f值和分子分母(自由度)的p值 我需要与以下链接中计算的内容完全相同的内容: 谢谢 请参阅模块。我实际上使用$f=Statistics::Distributions::fdistr进行计算,但我不知道这些函数中的哪一个可以帮助我计算p值……:(谢谢!统计::分发::fprob是我要找的:)谢谢!

Perl WWW::Mechanize文本字段问题

我正在尝试使用WWW::Mechanizeperl模块通过post方法提交表单 use WWW::Mechanize; my $mech = WWW::Mechanize->new(); ... $mech->get($url); ... my $response = $mech->submit_form( form_name => $name, fields => { $fie

Perl 杀死挂起的子进程

我的Perl脚本运行一个外部程序(只接受一个命令行参数)并处理其输出。最初,我是这样做的: my @result = `prog arg`; 然而,事实证明,该程序有缺陷,在极少数情况下会意外挂起。如果程序在一段时间后还没有退出,我如何杀死它?脚本必须在Windows和Linux中都能工作,据我所知,警报和分叉在Windows中不能很好地工作(或者根本不能工作) 我找到了一个名为的模块,但我无法从其文档中找到如何正确使用该模块的方法:-(我试过: use strict; use warning

Perl脚本-Can';t在@INC中找到Net/SSH/Perl.pm

我正在尝试运行一个Perl脚本,它只是从一台Windows2003x64复制到另一台相同类型的Windows机器上 我安装了ActivePerl,收到以下错误: F:\Supportsaves\Scripts\Supportsave_Script>Can't locate Net/SSH/Perl.pm in @INC (@INC contains: C:/Perl64/site/lib C:/Perl64/lib .) at F:\Supportsaves\Scripts\switche

WWW::Mechanize在Perl中,脚本被杀死

我编写了一个Perl脚本,它使用WWW::Mechanize连接到一个站点,登录,然后访问站点内的几个页面。这一切都很好,但是,当我试图访问大量页面时,脚本被终止。我确信这与HTTP服务器的配置和配置的连接限制无关。这是因为,脚本正在我自己的站点上运行 以下是我的脚本的高级概述: $url="http://example.com"; $mech=WWW::Mechanize->new(); $mech->cookie_jar(HTTP::Cookies->new()); $me

perl fork();行政长官()

为了我自己的学习目的,我试图掌握fork()和exec()的概念。我试图使用perl fork作为第二个相同的进程,然后使用它来执行一个.sh脚本 如果我使用fork()&exec(),我可以让.sh脚本与perl脚本并行运行吗?Perl脚本不等待子进程,而是继续执行。因此,我的perl脚本不关心子进程的输出,只关心命令是否有效并正在运行。有点像调用脚本在后台运行 我是否可以实现某种安全机制来确保子进程也正确退出 如果我使用fork()&exec(),我可以让.sh脚本与perl脚本并行运行吗?

Perl 按特定列中的数字排序

我有这种格式的数据(制表符分隔列) …我想按第9列中的前5个数字按升序排序。即,文件如下所示: Name_00001 Annotation_1 exon 193957 194252 . + . ID=exon:TAXON_00022T0:1;Parent=TAXON_00022T0 Name_00001 Annotation_1 exon 195500 197118 . + . ID=exon:TAXON_00022T0:2;Paren

在Perl中打开10000多个文件时出现问题

我需要在一个Perl脚本中打开10000多个文件,因此我要求系统管理员将我的帐户限制更改为14000ulimit-a现在显示以下设置: core file size (blocks, -c) unlimited data seg size (kbytes, -d) unlimited file size (blocks, -f) unlimited open files (-n) 14000 pipe s

Perl 使用LWP时出错

我试图在perl中使用LWP,并遵循链接中给出的示例: 但我犯了这样的错误: LWP::Simple模块不会导出“www.google.com” 在/System/Library/Perl/Extras/5.12/LWP/Simple.pm第23行出现导入错误后无法继续 这是我的代码: #!/usr/bin/perl -w use LWP::Simple $url = 'www.google.com'; $content = get $url; 我在这里

Perl 分布式测试框架

我正在搜索一些基于Perl或Python的分布式作业执行框架。事情是这样的: 在我的团队中,我们每周必须运行大约1000次回归测试,以确保新版本运行良好。起初,所有这些测试都在一台机器上运行,但现在我们有了更多的PC机,因此我们希望构建一个集群,并将所有测试分发到多台PC机上。这些测试是用Perl编写的,并由XML组织。我做了一些研究,但只发现了一些我完全不熟悉的Java框架。在Perl或Python中是否还有其他分布式框架,或者仅仅是一些描述这样一个系统的文章,我可以重新实现?谢谢。您可以使用

在perl中调节函数的执行时间

我有一个命令行函数,我想用Perl执行。但是,我只希望它最多运行X秒。如果在X秒时没有返回结果,我想继续。比如说,如果我想做 sub timedFunction { my $result = `df -h`; return $result; } 如果命令行命令在3秒后未返回任何值,我如何停止等待命令行命令完成?您想使用报警 local $SIG{ALRM} = sub { die "Alarm caught. Do stuff\n" }; #set timeout my $timeout

Perl 使用模块名称之间的差异;并使用Modulename();

使用Modulename之间是否有任何区别和使用Modulename()? 有时我看到,例如,使用Carp有时使用Carp()来自 如果不想调用包的导入方法(例如, 要防止名称空间被更改,请显式提供 空列表: use Module (); 使用Carp导入一些函数(carp等),但使用carp()不导入任何函数。来自: 如果不想调用包的方法(例如, 要防止名称空间被更改,请显式提供 空列表: use Module (); 这完全等同于 BEGIN { require Module } 如果

在Perl中取消对哈希数组的引用?

数据存储在@emailaddresses中,如下所示: $VAR1 = { 'email' => 'abc@google.com' }; $VAR2 = { 'email' => 'cde@google.com' }; $VAR3 = { 'email' => 'efg@google.com' }; $VAR4 = { 'email' => 'hij@google.com' }; 当我打印@emailaddresses(打印@emailaddresses)时,它打印的是

Perl动态哈希遍历

哈希引用的数组引用(0或更多级别的哈希引用)的哈希。请注意,叶节点上方的级别将始终是数组引用,即使它们只有一个元素 我需要通过保留散列引用的顺序(按插入顺序)来获取值的聚合和(在数组ref的数组中) 示例: (一) (二) 您需要编写一个函数来遍历哈希结构并计算必要的和。对于散列中的每个键,它需要做出以下决定: 如果此键的值是列表引用,则将此列表中哈希中的值元素相加,并返回[key,sum] 如果此散列的值是散列引用,则递归到该散列中。如果我们从中得到一个列表,将其附加到当前输出中并继续 在顶

模板工具包中的Perl逻辑

我有一个货币值,我想使用Locale::currency::format格式化它,但是我不知道如何格式化它 这是我在模板工具箱中的输出 [% amount %] 我希望使用以下方法输出: currency_format('USD', amount, FMT_SYMBOL) 模板工具包的新增功能,因此非常感谢您的帮助。如果您已在“控制器”中启用,则可以使用 嵌入式perl包含模块并添加vmethod,例如 例如: 如果您有权访问“控制器”,则可以添加一个 编辑:请注意,我使用sprintf格式

从perl调用大型bash命令

我想从perl调用一个大文件列表上的命令“touch”。 我正在使用的命令失败: $cmd = "touch $list_of_files"; $ret=system("sudo -u user bash -c \"$cmd\""); print $ret; bash中的命令长度是否有限制,还是因为我使用的是“system”? 除了将文件列表拆分为较小的列表之外,还有什么解决方案吗 谢谢 bash中的命令长度有限制吗 我相信是这样。但你为什么要起诉bash呢 system("sudo", "-

Perl SSLeay.so中未定义的符号:OpenSSL\u add\u all\u算法

我正在尝试使用LWP从远程主机下载文件。下面是我的代码的简化版本,它再现了错误: #!/usr/local/bin/perl5.8 -w use strict; use LWP::UserAgent; my $userAgent = LWP::UserAgent->new; $userAgent->agent("p_o_c"); my $request = HTTP::Request->new(GET=>"https://ajax.googleapis.com/aj

Perl 如何复制嵌套哈希

如何将多级嵌套哈希(例如,%a)复制到另一个哈希(例如,%B)?我想确保新的散列不包含与原始散列(%A)相同的引用(指针) 如果我更改了原始哈希(%A)中的任何内容,则它不应更改 新哈希(%B)中的任何内容 我想要一个通用的方法。我知道我可以通过按值重新分配来做到这一点 对于每个级别的键(例如,%{$b{kb}}=%a;) 但是,应该有一个解决方案,不管密钥级别的数量如何(hash of hash of hash of…hash of hash) 问题示例 use Data::Dumper;

Perl -M脚本开始时间减去文件修改时间,以天为单位

我预计-M$\uu为负数,但以下情况下为零: perl -E 'qx(touch $_), sleep(5), say -M for "/tmp/file"' 你提到过这样的行为吗?我想这可以解释你所看到的 perl -E 'say "START TIME",$^T; qx(touch $_), sleep(5), say -M for "/tmp/file"; say "STAT ON FILE", (stat(_))[9]' 当我运行它时输出 START TIME1434460114 0

调用带有和不带&;的子例程时有什么区别;用Perl?

在我的家庭作业中,有人告诉我在Perl中生成一个子程序,当用其中的参数调用时,它会打印参数。我这样做了,作业的第二部分是在第二个子例程中调用第一个子例程。所以我做了所有这些,但问题是:在调用第一个子程序时,尝试运行第二个带“&”的子程序,不带“&”,并写出这两个不同调用的区别。所以子例程似乎在这两种情况下都能很好地工作,有和没有,但我不知道它到底发生了什么变化,所以我不知道该写什么。 离题,我的代码看起来好吗?这是第一次用Perl编写代码 代码如下: #!/usr/bin/perl use 5

替换二进制格式0->;1和1->;0值-perl

在我的脚本中,我处理的是二进制值,我需要在一个位置替换0->1和1->0 例如: 输入数字=10101001 输出数字=01010110 我尝试了$string=~s/1/0/和反向功能,但无法给出正确的输出 谁能帮我一下吗 使用: 产出: 01010110 如果输入字符串只有这两种可能性0和1,则可以在多阶段方法中使用替换: $str =~ s/1/x/g; # all 1's to x $str =~ s/0/1/g; # all 0's to 1 $str =~ s/x/0/g;

Perl 如何用逗号和';和';?

给定一个列表(a,b,c)创建字符串的最佳方法是什么,其中逗号分隔所有元素,最后一个元素由“and”分隔:a,b和c。理想情况下,这也适用于一个和两个元素列表。请记住,在提出问题之前先搜索问题,因为以前曾提出过类似的问题(但对于Python): 在perl中实现这一点的一种方法是: #!/usr/bin/perl use v5.10; my @list = qw( a b c ); say join ' and ', $#list ? ( join(', ', @list[0..$#list

Perl substr的Bizzare输出

我试图从一个代码中提取年份,该代码看起来像cs600032016s。 年份从索引7到10,但为了概括前面代码的可变长度,我使用了以下代码: $year = substr($code, $len-5, $len-1); 但它给我的是2016s而不是2016年。知道错误在哪里吗?将$len-1更改为$len-2或$len-3不会改变输出。这很奇怪。 代码如下: sub getCCodeFromCode{ my ($code) = @_; my $len = length($code);

如何在使用perl进行频率计算时删除计算原始字符串

我在使用Perl计算从文本文件读取的字符串列表的频率时遇到问题。我想做的是,分别计算每行中的字符数。我的代码确实可以处理它,但它也将原始字符串作为单个字符进行计算 这是我的密码 sub cal_frequency{ while (my @row = <$fd>){ chomp; for (my $i=0; $i<=147; $i++){ my %count; print "$row[$i]\n";

Perl “服务中的对象”下不可见的修饰符

鉴于以下情况: Moo 2.001001 面包:纸板0.34 一个Bread::Board容器 基类Foo带有属性str和around修饰符,用于str 子类Bar扩展Foo 问题是: [好]当从普通条实例化对象时,执行Foo::str修饰符 [BAD]从容器服务为Bar实例化对象时,Foo::str修饰符未执行 [更糟]在[坏]发生后,从普通条实例化也不再有效 代码示例: #!/usr/qlc/apps/common/perl_5.18.2/bin/perl -w package F

perl是否在一定范围内优化foreach?

给出一个简单的程序: use strict; use warnings; my $count = 0; foreach ('a' .. 'zzzzzzzzzz') { $count++; } print "$count\n"; perl是否会在内存中创建大约1.4+e14元素的整个范围,然后对它们进行迭代,或者它是否有任何内部优化,一次只跳过一个范围运算符的状态 实际上,我已经运行过了,所以来自top的经验数据显示它是后者(而且它还没有完成查看time的数据),但它是否在任何地方

替换Ubuntu 16.04上的默认perl

我得到了一个用Perl编写的大型项目,其中包含许多以典型#开头的脚本/usr/bin/perl 对于这个项目,我需要从源代码编译一个定制的Perl 我试着用编译好的/usr/bin/perl替换/usr/bin/perl,但是操作系统坏了(比如模块版本不匹配等) 那么,有没有什么正确的方法可以用我自己构建的perl替换系统,或者最简单的方法是编辑所有的脚本,并用/usr/local/bin/perl或类似的东西替换/usr/bin/perl?不要替换系统perl(或一般的系统二进制文件)。您可以

Perl 为什么Moo';s builder方法是否只能访问某些其他属性?

我希望生成器方法能够访问调用者提供的所有其他属性。但它似乎只能访问那些名称的字母顺序比当前属性的字母顺序短的人。例如,为什么b的生成器在此处可以看到a的值,而不能看到c?(最终对象中同时存在“a”和“c”) 代码: 输出: Moo version: 2.003004 $self_during_build_b = bless( { 'a' => 1 }, 'P' ); $p = bless( { 'a' => 1, 'b' => 'somebuiltvalue',

Perl readline挂在手动管道上()

我正试图驱散open的魔叉变体: # magic-fork.pl if (open my $fh, '-|') { # fork self, make new fd for reading, attach child STDOUT to it STDOUT->say('parent getpid: ', $$); STDOUT->say('parent STDOUT->fileno: ', STDOUT->fileno); STDOUT->s

Perl文件::Find-isn';t递归运行

我有一个基本的Perl脚本,它应该递归地遍历我的目录树 #!/usr/bin/perl -w use strict; use File::Find; my $dir = '/mnt/drawings'; find(\&process_file, $dir); sub process_file { print("$File::Find::name\n"); } 但是,当我在CentOS系统上运行它时,它只在大约20个目录下的“/mnt/drawings”下打印第一级。但是当我

Perlbrew建筑5.28.2出现故障,显然没有故障

我对perl比较陌生,不习惯构建开发工具。我尝试构建5.28.2,但失败如下: Test Summary Report ------------------- porting/libperl.t (Wstat: 65280 Tests: 35 Failed: 0) Non-zero exit status: 255 Parse errors: No plan found in TAP outpu

Perl 为什么LWP在OS X上失败,但在我的Windows 10上却没有?

我用perl 5.14.2在(1)PC/Windows 10上尝试了getstore()和get(),用perl 5.18.2在(2)Mac/OS X 10.11.6上尝试了getstore()和get() getstore生成的一些状态代码如下:200是一个好的URL,500是“服务器未能交付”。 有没有办法解决这个问题 use strict; use warnings; use LWP::Simple; print "\nThe below is successful on bo

  1    2   3   4   5   6  ... 下一页 最后一页 共 967 页