我有一个Perl包(例如汽车),它是一些其他模块的基类(例如面包车,豪华轿车,敞篷车......) -
use base ("car");
Run Code Online (Sandbox Code Playgroud)
在van的pm文件中,...
我需要确保不使用汽车 - 只允许使用继承的物体(货车,豪华轿车,......).
今天我在基类内部使用ref().如果它返回"car"的名称,我知道它在没有继承的情况下使用,然后我退出并出现错误.
如果van,...使用ref()将返回"van",...
是否有更优雅/静态的方式来做到这一点.让我们说一种方法,我可以获得一种语法错误?
不,我不喜欢与OO语言讨论OO主题中Perl的弱点;-)
编辑: 这是一个示例.有用.
问题是,如果是更好的方式来检查car :: new.
#---------car.pm----------
package car;
sub new
{
my $class = shift;
my $self = {};
bless ($self, $class);
if(ref($self) eq "car") # thats my check to make sure beep exists
{ die "no allowed because no beep here";
}
$return $self;
}
sub honk
{ beep (); # only defined in the inherited class (van, ...)
}
1;
#----van.pm-----
package van;
use car; …Run Code Online (Sandbox Code Playgroud) 我需要检查一些Web服务器(HTTP/HTTPS)的网络可用性.为此,我只需要ip/dns和端口.但是我有一个URL列表.我想使用CPAN模块来完成这项工作.
但是: - HTTP :: Tiny,LWP :: UserAgent,...检查HTTP-stats,而不是网络状态.我需要检查第二个(建立连接),我不关心HTTP标头和内容.
那么任何想法,如果HTTP模块也提供网络状态?
谢谢!
是否有一些perl"魔法"迭代通过值排序的哈希值,但在迭代中获取密钥?
按X排序并获得X很容易(键,值) - 以及按键排序并获取值.
谢谢!
假设我有一种带有垃圾回收的语言(例如Java)。
for (...)
{
List <String> lst = new ...
// do something with lst
// lst not longer needed for this pass of the loop
lst.clear ();
}
Run Code Online (Sandbox Code Playgroud)
循环主体末尾的clear()不是必需的。在下一次传递中,lst将被启动。GC也将释放内存。
但是,清除还是跳过是更好的样式?
我尝试从 PDF 中提取一些文本。为此,我需要定义一个包含文本的矩形。
当我将文本提取的坐标与绘图的坐标进行比较时,我认识到坐标可能具有不同的含义。
package MyTest.MyTest;
import org.apache.pdfbox.pdmodel.*;
import org.apache.pdfbox.pdmodel.PDPageContentStream.*;
import org.apache.pdfbox.text.*;
import java.awt.*;
import java.io.*;
public class MyTest
{
public static void main (String [] args) throws Exception
{
PDDocument pd = PDDocument.load (new File ("my.pdf"));
PDFTextStripperByArea st = new PDFTextStripperByArea ();
PDPage pg = pd.getPage (0);
float h = pg.getMediaBox ().getHeight ();
float w = pg.getMediaBox ().getWidth ();
System.out.println (h + " x " + w + " in internal units");
h = h / 72 * 2.54f …Run Code Online (Sandbox Code Playgroud) 假设我有一个执行foo的程序.baz是一个需要测试的新功能.
public static void main (String [] args)
{
foo (); // existing
baz (); // new
}
Run Code Online (Sandbox Code Playgroud)
为了测试baz,我会把它放在foo前面.所以不需要等待foo.
而且我也希望在巴兹之后结束(跳到外部范围).这是关于测试巴兹,我想在那之后退出.但是我不想把foo放在评论中(也许它比1行更复杂).
我心中最好的就是这个.
public static void main (String [] args)
{
baz ();
if (1==1) return; // unconditional jump to outer scope
foo ();
}
Run Code Online (Sandbox Code Playgroud)
我不喜欢这个
如果(1 == 1)
但我不知道任何其他选择.
不允许简单返回(编译器错误,无法访问的代码).
System.exit只有在我们讨论main时才会起作用,但如果我的代码处于更大的上下文中则不行.我想回到外围.
对此更好的想法?