如何在Perl CGI程序中使用printf获得彩色输出



我想为我需要在Perl CGI程序中打印的内容设置字体颜色和样式。

我们不使用 CPAN.txt 文件来安装模块使用Term::ANSIColor和所有。

例:

print "Hello world"; 

CGI 相关答案 (当问题被修改为 CGI 时(

如果你想在网页上实现颜色,那么你可以通过CSS来实现。

在 html 标记中,您可以应用直接标记来设置字体样式、大小和颜色:

<span style="font-size: 1.5em; color: #555555; font-family: "Times New Roman", Times, serif;">Hello World</span>

建议将 CSS 与标记分开,改用 CSS 样式属性。

...
<head>
    <style>
        .hello { 
             font-size: 1.5em;
             color: #555555;
             font-family: "Times New Roman", Times, serif;
         }
    <style>
 </head>
 <body>
     <div><span class="hello">Hello World</span></div>
 ...

通过这种方式,CSS 可以在 HTML 标记中重用 elswhere。

你也可以把所有的CSS放到它自己的CSS文件中(示例my.css(:

.hello { 
    font-size: 1.5em;
    color: #555555;
    font-family: "Times New Roman", Times, serif;
}

然后在输出的 HTML 中<link>

...
<head>
    <link rel="stylesheet" type="text/css" href="my.css">
 </head>
 <body>
     <div><span class="hello">Hello World</span></div>
 ...

当涉及到使用perl时,你最好通过使用模板来解决这个问题。将 HTML 放入模板文件中,通过诸如 HTML::TemplateTemplate::Toolkit 之类的内容加载模板,填充所需的任何值,然后从该模板输出 HTML 页面。

这允许您将"标记/html"与编程逻辑分开,避免内联文档的混乱,并使代码的未来维护更容易。

如果您的输出具有"动态"颜色(页面上可能会更改的颜色(,请将每个颜色定义为一个类,并使用模板设置用于提供所选样式的类。

原始问题答案(当输出似乎指向终端时(

术语帽可以提供颜色(取决于环境中设置的TERM(。

您可以通过Term::ScreenColor CPAN 模块使用术语上限:

 use Term::ScreenColor;
 my $term = new Term::ScreenColor();
 $term->green->puts('This is green')->reset();

我不建议Term::ANSIColor,因为它只是发出原始的ANSI颜色序列,并且无法识别您的术语环境。(如果您在没有颜色的术语上使用Term::ANSIColor运行代码,则最终会在输出中产生[34;2m类型序列(。

注意:此模块依赖于Term::Screen而而又需要Term::Cap

根据更新的问题回答。Drav已经向您展示了如何在终端中打印彩色输出。

要在浏览器中打印彩色信息,只需使用 CSS。编辑您的 HTML/模板文件以包含相对的 HTML 标记和样式表。

如果你想从你的CGI脚本中提供样式数据,那么你可以做如下的事情

print h1({-style=>'Color: red;'},'Hello world');

另外:在提出此类基本问题之前,请先阅读CGI文档。